Zėŋōfōbìå

24 marzo 2007

Gestire i log con log4net

Filed under: C#, informatica — Tag:, — Zeno @ 11:01

Ho sempre dedicato una fetta del tempo di sviluppo di qualunque applicazione di un certo rilievo alla realizzazione di una libreria di log che fosse comoda e adatta alle esigenze del programma. In genere quello che occorre è sempre uguale: una routine che permetta di salvare su un file, piuttosto che in un sql, un insieme di informazioni che comprenda: data del log, entità del problema, thread, riga del file di codice (ammesso che sia possibile), messaggio.
Mi è capitato più di una volta di perdere del tempo per una cattiva implementazione della libreria, alla quale non si vuole dedicare mai troppo tempo.

Sto provando Log4Net, soluzione di Apache che mi pare eccellente. Modulare, configurabile, comoda, semplice, è una meraviglia.

Un esempio per chiarirne la comodità:

using log4net;
using log4net.Config;

...
static class Program
{
    private static readonly ILog log =
        LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    static void Main()
    {
        // Set up a configuration taken from xml.
        XmlConfigurator.Configure(new System.IO.FileInfo("logfile.xml"));

        log.Info("Main");
    }
}

Notate che non viene determinata la forma del log: questa è descritta nel file xml logfile.xml, che contiene:

<?xml version="1.0" encoding="utf-8" ?>

<log4net>
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="filelog.log" />

    <appendToFile value="true" />
    <maximumFileSize value="1000KB" />
    <maxSizeRollBackups value="10" />

    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger (%file:%line) - %message%newline" />
    </layout>

  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="RollingFile" />

  </root>
</log4net>

In questa maniera vengono creati dei file di nome myproject.log, per un massimo di 100Kb e 20 files.
conversionPattern definisce la formattazione, che in questo caso produce log del tipo:

2007-03-22 15:27:43,923 [10] INFO Program (C:ProgettitestLog4net.cs:26) - Main

Crea un sito o un blog gratuitamente presso WordPress.com.