Sei sulla pagina 1di 3

http://www.devland.it/cs/blogs/marco-del-gatto/archive/2007/09/16/log4net-in-asp-net-2-0-guida-rapida-rapidissima.

aspx

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" />