5

Nella mia app.config voglio impostare 3 livelli di traccia (switch?): Verbose, warning e none. Nella versione di debug del codice, voglio che l'interruttore dettagliato sia attivo, nella versione Voglio avvertimento. In casi particolari, gli utenti dell'applicazione possono modificare il file di configurazione per disabilitare tutte le tracce.non può capire .net 2010 tracing e app.config

Desidero che le tracce di debug vengano emesse sulla console, mentre le tracce di rilascio solo su un file di registro.

I', ve scritto quanto segue:

[...] 
<system.diagnostics> 
     <sources> 
      <!-- This section defines the logging configuration for My.Application.Log --> 
      <source name="debug" switchName="debug"> 
      <listeners> 
       <add name="FileLog"/> 
       <add name="console"/> 
      </listeners> 
      </source> 

      <source name="release" switchName="release"> 
      <listeners> 
       <add name="FileLog"/> 
      </listeners> 
      </source> 

      <source name="silent" switchName="none"> 
      <listeners/> 
      </source> 
     </sources> 


     <switches> 
      <add name="debug" value="Verbose"/> 
      <add name="release" value="Warning"/> 
      <add name="none" value="Off"/> 
     </switches> 


     <!--<sharedListeners> 
      <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
      <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" /> 
     </sharedListeners>--> 

     <trace autoflush="false" indentsize="4"> 
      <listeners> 
       <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
       <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false"/> 
       <remove name="Default"/> 
      </listeners> 
     </trace> 

    </system.diagnostics> 
[...] 

Poi nel codice che chiamano traccia in questo modo:

Public Shared Sub HandleException(ByVal ex As Exception) 
    Trace.WriteLine(ex.Message, "Error") 

[...]

C'è qualcosa che mi manca Credo. Come si dice al metodo Trace l'interruttore giusto da usare ?? In che modo gli utenti dell'applicazione possono modificare il file di configurazione per consentire la traccia o disattivarlo?

Grazie.

risposta

7

Sembra che si mischi il concetto di registrazione/traccia tramite Trace.Write e Trace.WriteLine con registrazione/traccia utilizzando oggetti TraceSource.

Gli oggetti TraceSource consentono di controllare singolarmente (tramite gli interruttori) "oggetti di registrazione" in modo da poter attivare la registrazione per parte del codice e disattivarla per altre parti del codice. L'output degli oggetti TraceSource può essere configurato per passare a TraceListeners diversi (o allo stesso TraceListener). Trace.WriteLine non è davvero molto flessibile. Può essere configurato con un solo livello (ad esempio a livello globale è possibile accedere a Debug o Info o qualsiasi altra cosa), mentre con TraceSources, una TraceSource può accedere a Debug e un'altra potrebbe accedere a Info mentre un'altra potrebbe essere completamente disattivata.

Vedere le mie risposte in questi collegamenti per alcuni esempi su come configurare TraceSources e come utilizzarli nel codice.

How to use TraceSource across classes

Turning tracing off via app.config

What's the best approach to logging?

Add Trace methods to System.Diagnostics.TraceListener

per quanto riguarda come si desidera che il tracciato/registrazione per lavorare in eseguire il debug vs rilascio, si possono avere due file App.config differenti. Entrambi definirebbero le stesse TraceSources (cioè lo stesso insieme di oggetti di traccia/registrazione "nominati"). Nell'app.config da utilizzare con le build di debug, è possibile impostare il livello di traccia/registrazione su un valore Debug/Info/Whatever e si potrebbe indirizzare l'output alla Console e/o a un File e/o qualsiasi altra cosa. Nell'app.config da utilizzare con le build di debug, è possibile impostare il livello di traccia/registrazione su un valore diverso (o su Off) e indirizzare l'output su un file.

In entrambi i post sopra, includo diversi altri collegamenti a informazioni su System.Diagnostics, incluso il progetto Ukadc.Diagnostics. Questo progetto fornisce una funzionalità di formattazione molto interessante da utilizzare con TraceListeners basati su System.Diagnostics (a condizione che gli ascoltatori provengano da Ukadc.Diagnostics) con NESSUNA modifica delle dichiarazioni di tracciamento/registrazione effettive. La capacità di formattazione è simile a quella fornita da log4net e NLog.

Leggere le informazioni che ho collegato sopra e vedere se aiuta.Prova a utilizzare TraceSources anziché solo Trace.WriteLine. Quando ti senti a tuo agio con questo, forse dai un'occhiata a Ukadc.Diagnostics.

+0

Grazie mille, ho letto tutto, hai fatto luce nella mia oscurità di registrazione :) Ti suggerirei di scrivere un articolo/post di blog/pagina web, qualunque cosa per concentrare tutte le informazioni che altrimenti sarebbero diffuse . Se lo fai, quindi inviami il link! Grazie ancora. – vulkanino

+0

Alla fine ho capito, ma non riesco ancora a ottenere l'uso dell'ID per passare al metodo TraceEvent. Se l'origine di tracciamento mi consente di configurare dove (ascoltatori) e quanto (switch) registrare, e quindi ho programmaticamente specificato il tipo di evento (TraceEventType), a cosa serve dover specificare anche un ID? – vulkanino

+1

Per un'idea degli ID evento, vedere la prima risposta a questa domanda: http://stackoverflow.com/questions/576185/logging-best-practices Guarda sotto "Altri consigli". Seguendo questo suggerimento, è possibile classificare ogni messaggio di registro (indipendentemente da TraceSource, TraceEventType o dal messaggio). Sarebbe quindi relativamente facile interrogare/cercare l'output per determinati tipi di messaggio. Ad esempio, se ID evento 1001 significa "lettura da file" e 1002 significa "scrittura su file", è possibile trovare tutti i messaggi di registro nell'output che corrispondono alla lettura o alla scrittura in un file. – wageoghe

Problemi correlati