Confessions of a Dangerous Mind

Brain.FlushBuffer()
posts - 176, comments - 234, trackbacks - 93

Thursday, July 28, 2011

Log4net e la configurazione dichiarativa

Ormai da anni impiego log4net per implementare lo strato di logging nei miei progetti e mi trovo veramente molto bene.

Una delle caratteristiche che amo di più di log4net è la possibilità di cambiare log sink solamente tramite file di configurazione, permettendo così di fatto la gestione del log nella propria applicazione senza preoccupazioni di dove poi questi messaggi vadano a finire o se una certa destinazione del log (ad esempio un DB) sia o meno presente nell’ambiente di produzione.

La configurazione di questo motore di logging avviene tramite sezione del file di configurazione (web.config o <app>.config) e questa configurazione viene “caricata” all’esecuzione del comando:

log4net.Config.XmlConfigurator.Configure()

Vi sono dei casi però, nei quali non siamo sicuri che un’applicazione effettui questa chiamata. Mi riferisco a quei casi in cui la nostra DLL, splendidamente farcita di log, venga chiamata da una file eseguibile il quale, pur avendo un file di configurazione .config che comprende magari anche la sezione di configurazione di log4net, non chiami correttamente il metodo Configure().

In questi casi saremmo noi costretti a controllare se il logger è stato o meno configurato, il che renderebbe tutto molto meno pratico.

Per risolvere la problematica, si può impiegare la seguente strategia:

  1. Rimuovere la configurazione di log4net dal file .config e riportarla in un file log4net.config, da copiare ovviamente nella directory della nostra applicazione
  2. Impostare nel file AssemblyInfo di ogni progetto di tipo Class Library per la quale desideriamo attivare la configurazione del logging l’attributo
    [assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch=true)]

In questo modo otteniamo due interessanti benefici: il primo è quello di isolare la configurazione del logging in un file, rendendola di fatto facilmente riutilizzabile e modificabile. Cambiando infatti SOLO il file log4net.config otterremo un comportamento del logging differente.

Il secondo è quello di poter dare per configurato il loggining nelle nostre dll, che potranno quinidi essere distribuite anche a sviluppatori terzi, senza richiedere loro di referenziare log4net e richiamare il metodo Configure.

posted @ Thursday, July 28, 2011 3:05 PM | Feedback (0) |

Powered by:
Powered By Subtext Powered By ASP.NET