Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

In questo post voglio darvi le dritte necessarie per iniziare a usare log4net in cinque minuti in una applicazione ASP.NET 2.0, superando la barriera iniziale di apprendimento che questa potente libreria potrebbe presentare.

Per chi non lo sapesse log4net è una libreria open source sviluppata da Apache per gli sviluppatori .NET (scaricabile gratuitamente qui) utilissima per tracciare gli eventi / errori delle nostre applicazioni sia in fase di debug che in produzione.

download
Per prima cosa scaricare l'ultima versione di Log4net.dll e aggiungere una reference nel progetto (nelle class library e/o nella web app.).

web.config
Nel file web.config nella sezione Configuration->Configsections aggiungere la sezione:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

Aggiungere poi la sezione di configurazione vera e propria di log4net come in questo esempio:

<log4net>

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">

<file value="c:\tmp\web.log" />

<appendToFile value="true" />

<maximumFileSize value="1024KB" />

<maxSizeRollBackups value="5" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%date %level %logger - %message%newline" />

</layout>

</appender>

<root>

<level value="DEBUG" />

<appender-ref ref="RollingFile" />

</root>

</log4net>

In questa configurazione verrà creato un file denominato "c:\tmp\web.log" e sarà riempito di righe di log, finche il suo peso non avrà raggiunto 1024KB; a quel punto il file verrà rinominato "web.log.1" e poi "web.log.2" e cosi via per un massimo di 5 backup (maxSizeRollBackups).

Per ogni riga verrà stampata: la data, il livello di severità, la classe chiamante e infine il messaggio.

Ricordatevi che questo è solo un esempio di utilizzo: sul sito di Log4Net trovate tutte le possibili opzioni di configurazione.

Globa.asax
Aggiungete un file Global.asax nella root della web application (se non lo avete già), e nell'evento “Application_Start” aggiungere la riga:
log4net.Config.XmlConfigurator.Configure();

Questo fa si che alla partenza dell'applicazione l'object model di Log4Net si configuri con quanto specificatonel web.config.

Utilizzo vero e proprio
A questo punto possiamo cominciare a loggare.

Nelle classi (o pagine) in cui si vuole loggare aggiungere un field statico fatto cosi':
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Questa tecnica (in alternativa all'utilizzo di un unico oggetto globale) permette di non dover specificare in ogni chiamata di log il nome della classe in cui ci si trova. 

usiamo quindi il nostro oggetto log per tracciare con uno dei 5 metodi corrispondenti ai 5 livelli di severità, nell'ordine:

log.Debug("Operazione eseguita")

log.Info("Operazione eseguita al secondo tentativo")

log.Warn("Operazione eseguita con errori");

log.Error("Operazione non completata");

log.Fatal("Il Sistema remoto non risponde");

Il livello di soglia definito nel web.config ("<level value="DEBUG" />") stabilisce quali messaggi verranno effettivamente loggati (dal livello specificato in su).

Tracciare una eccezione

Tutti e 5 i metodi prevedo un overload per tracciare l'intero stack trace di una eventuale eccezione catturata:

int a = 0;
try
{
a = a / a;
}
catch (Exception ex)
{
log.Error("Si è verificato un errore", ex);
}

Campi custom e multithread

Molto probabilmente vorremo aggiungere automaticamente dei campi custom nella riga di log, magari per suddividere le righe di diversi utenti

In questo caso prima di loggare possiamo impostare una o più nostre proprietà custom alla classe ThreadContext

log4net.ThreadContext.Properties["ShoppingCartID"] = Session["ShoppingCartID"].ToString();
log.Debug("Inserito articolo nel carrello")

 

Nel web.config specifichiamo che vogliamo nell'ouput anche questa proprietà aggiungendola alla riga del ConversionPattern:

<conversionPattern value="%date %level %property{ShoppingCartID} %logger - %message%newline" />
Published domenica 16 settembre 2007 15.59 by marcodelgatto

Comments

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

lunedì 4 febbraio 2008 9.38 by Spartaco
The tip about the use of reflection is nice!

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

lunedì 11 febbraio 2008 10.38 by stella
ma perchè non mi partono i log??

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

venerdì 15 febbraio 2008 11.19 by Salvatore Di Fazio
Io ottengo il seguente errore: Unrecognized configuration section log4net. sapete dirmi xchè?

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

venerdì 15 febbraio 2008 11.49 by marcodelgatto

hai aggiunto la config section come indicato nel primo passo del post ?

ciao.

m.

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

mercoledì 24 settembre 2008 16.59 by antimo
ho aggiunto il Glabal.asax in locale funziona, ma compilato il progetto ed esportato sul server il Glaba.asax viene esculo ed il log non traccia

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

mercoledì 24 settembre 2008 20.32 by marcodelgatto

uhm, hai verificato che la directory di produzione in cui hai messo il global.asax sia configurata come application e non come semplice virtual directory ?

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

mercoledì 15 ottobre 2008 17.26 by stefanomnn
post chiarissimo... molto meglio questo della doc ufficiale! Complimenti, e grazie!

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

venerdì 17 ottobre 2008 9.21 by Corrado
Ottima quick guide, grazie! Ho trovato molto utile i tuoi accenni al threadcontext, fanno proprio al mio caso. Ciao

# Utilizzare Log4Net in 30 secondi

martedì 17 marzo 2009 16.03 by Around and About .NET World

Utilizzare Log4Net in 30 secondi

# Utilizzare Log4Net in 30 secondi

martedì 17 marzo 2009 16.03 by Around and About .NET World

Dovendo inserire un sistema di logging in un’applicazione abbastanza grossa su cui mi trovo a lavorare

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

mercoledì 18 marzo 2009 10.21 by Mario
Davvero molto utile!!!

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

mercoledì 29 aprile 2009 23.31 by Anhellito
Sei un grande, log4net lo usano dove lavoro ma io non lo conosco, in 2 secondi ho già capito tutto,(ovvio a livello base) il giusto per iniziare a provare.grazie!

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

lunedì 13 luglio 2009 10.03 by onyx
in produzione, con un traffico elevato, non funziona più: la pagina non usa necessariamente lo stesso thread per tutto il ciclo di vita. vedere qui: http://www.brianlow.com/index.php/2007/04/17/log4net-aspnet/

# re: Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima!

giovedì 8 luglio 2010 12.19 by gigisector
un grazie infinite

# Twitter Trackbacks for Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima! - Marco del Gatto - web developers blog [devland.it] on Topsy.com

Pingback from  Twitter Trackbacks for                 Log4Net in ASP.NET 2.0 - guida rapida.... rapidissima! - Marco del Gatto - web developers blog         [devland.it]        on Topsy.com

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Powered by Community Server (Commercial Edition), by Telligent Systems