Le classi System.Diagnostics.Debug e System.Diagnostics.Trace sono le classi principali per il
debugging delle applicazioni, e sono di base praticamente identiche (hanno
apparentemente gli stessi metodi e proprietà); 'unica differenza veramente
avvertibile è che in base alle impostazioni di default di Visual Studio i
progetti in configurazione DEBUG vengono compilati con i simboli DEBUG e
TRACE, mentre in modalità RELEASE solo con il simbolo TRACE.
Ciò comporta
che le istruzioni del tipo Debug.Write verranno eseguite solamente negli
eseguibili compilati in modalità DEBUG, mentre le istruzioni tipo Trace.Write
verranno eseguite pure in modalità RELEASE.
Questo ovviamente si traduce nel fatto che potete monitorare l'attività di
una applicazione "definitiva" e già rilasciata tramite gli output dei comandi
Trace, in pratica un rudimentale logging (ovviamente per logging + seri meglio
usare altri strumenti...).
Chiaramente se dal Visual Studio vedete gli output nel pannello Output, dal
vosto cliente vi servirà un "supporto" per scrivere e visualizzare i log
entries: ecco come utilizzare un file di testo, definibile e configurabile
tramite il file config della vostra applicazione.
Nel file app.config va inserita questa sezione all'interno del tag
configurations:
<system.diagnostics>
<switches>
<add name="FileListenerTraceSwitch" value="4" />
</switches>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="FileListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="FileListener.log" />
</listeners>
</trace>
</system.diagnostics>
Viene in pratica definito un TraceSwitch, che serve a definire il dettaglio delle informazioni da visualizzare, e un
listener di tipo TextWriterTraceListener, collegato al file su disco FileListener.log (all'interno del
path dell'applicazione, possono essere specificati pure percorsi
assoluti).
Da codice l'unica cosa che serve è inizializzare lo switch e poi utilizzare
il metodo della classe Trace, WriteLineIf.
TraceSwitch logSwitch = new TraceSwitch("FileListenerTraceSwitch", "trace switch");
Trace.WriteLineIf(LogSwitch.TraceVerbose, "Hello,
Log!");
La cosa interessante di questo sistema è che modificando il file app.config,
ad esempio inserendo value="0" nei parametri dello switch, è possibile
disabilitare il trace o modificare la profondità del dettaglio dello stesso.
Ora, l'utilità di questo post sarà pari a zero per il 99% degli sviluppatori
dotnet (che già sapevano il tutto e che direttamente usano gli application
blocks per "loggare" le proprie applicazioni), xò questo è un sistema immediato
e funzionale pur se rudimentale, e ho dovuto "googlare" una buona mezzora
per arrivare qui e capirci un pò di +...
powered by IMHO 1.3