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