Basta fare una piccola ricerca su Internet per trovare diversi framework di logging per .NET (vedi Log4NET, solo per citare il più famoso). Ci sono comunque situazioni in cui gli strumenti offerti da .NET sono più che sufficienti: basta utilizzare opportunamente la classe Trace e il file app.config per creare un semplice sistema di logging.
Allo scopo, si deve innanzi tutto inserire una sezione come la seguente nel file di configurazione dell'applicazione:
1 <system.diagnostics>
2 <trace autoflush="true" indentsize="4">
3 <listeners>
4 <add name="textLoggerListener"
5 type="System.Diagnostics.TextWriterTraceListener"
6 initializeData="TaskLog.log" />
7 <add name="configConsoleListener"
8 type="System.Diagnostics.ConsoleTraceListener" />
9 </listeners>
10 </trace>
11 <switches>
12 <!-- This switch controls general messages. In order to
13 receive general trace messages change the value to the
14 appropriate level. "1" gives error messages, "2" gives errors
15 and warnings, "3" gives more detailed error information, and
16 "4" gives verbose trace information -->
17 <add name="TraceLevelSwitch" value="4" />
18 </switches>
19 </system.diagnostics>
La sezione listeners (righe 3-7) specifica dove devono essere scritti i log: nel nostro caso, su un file di testo di nome TaskLog.log e sulla console. La sezione switches (righe 9-15), invece, indica che tipo di messaggi registrare: sono ammessi valori da 1 a 4, come indicato nel commento.
Fatto questo, nella nostra applicazione dobbiamo creare un oggetto di tipo TraceSwitch:
TraceSwitch traceSwitch =
new TraceSwitch("TraceLevelSwitch", "Logging message switch");
Il primo parametro deve essere uguale al nome dello switch che è stato definito nel file di configurazione. L'oggetto così definito conterrà delle proprietà che indicano se si vuole effettuare il log degli errori (TraceError), degli avvisi (TraceWarning), di informazioni più dettagliate sulle operazioni (TraceInfo) oppure se si vuole un logging "verboso" (TraceVerbose).
Per utilizzare queste informazioni nel nostro sistema di logging, basta utilizzare il metodo Trace.WriteLineIf (oppure Trace.WriteIf):
Trace.WriteLineIf(traceSwitch.TraceVerbose, "Recupero in corso....");
Trace.WriteLineIf(traceSwitch.TraceInfo, "Operazione completata.");
Trace.WriteLineIf(traceSwitch.TraceError, "Errore durante l'esecuzione.");
Il messaggio corrispondente sarà scritto nel log solo se la proprietà specificata come primo argomento vale true.
Utilizzando questo sistema, è possibile aggiungere nuovi listener o modificare il livello di logging semplicemente intervenendo sul file di configurazione dell'applicazione.
Technorati tags:
.NET,
Programming,
CS