Quello che stai descrivendo è la classe System.Diagnostics.Trace
, che ha alcuni metodi semplici per scrivere sull'output di traccia diagnostica.
Questo è lontano da quanto sia potente la diagnostica tracciamento sono in .NET
il modo più bello per fare tracing è quello di creare un TraceSource
. In una classe TraceSource
c'è una proprietà Switch
che a sua volta ha una proprietà Level
in cui si definiscono i livelli di verbosità desiderati per quello specifico TraceSource
. Si può fare che TraceSource ascoltare tutti i livelli:
var ts = new TraceSource("My Verbose Debugger") {Switch = {Level = SourceLevels.All}};
Poi per tracciare qualcosa, si traccia a quella fonte, in cui si specifica il livello, in questo modo:
ts.TraceData(TraceEventType.Verbose, 0, dataToBeTraced);
Il 0
è l'ID la traccia e dataToBeTraced
è un oggetto con i dati specifici che si desidera tracciare (è un parametro params [] object
, quindi è possibile passare in molti oggetti se lo si desidera).
Ora come utilizzare i dati? Usando uno TraceListener
che aggiungi alla tua collezione Listeners
TraceSource
. Fate la propria classe derivanti da TraceListener
e l'override del metodo TraceData
, in questo modo:
class MyTraceListener : TraceListener
{
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, params object[] data)
{
base.TraceData(eventCache, source, eventType, id, data);
// do what you want with the objects in the "data" parameter
}
}
L'ascoltatore può essere condivisa tra molti tracesources, e sarà solo ricevere il livello di dati che è TraceSwitch
livello consente.
System.Diagnostics.Trace
utilizza un ascoltatore così (l'DefaultTraceListener) che viene aggiunto per impostazione predefinita sia Debug.Listeners
e Trace.Listeners
, ma internamente, funziona come descritto.
All'inizio tutto potrebbe sembrare un po 'confuso, ma è davvero potente, e una volta che hai un set di classi helper ... almeno io, ho smesso di usare librerie di logging di terze parti e lo uso in larga misura.
Per quanto riguarda Azure, questo è pura speculazione in quanto non ho mai fatto alcun Azure, ma credo che ci si configura il TraceSource come questo nella tua app.config
(forse web.config
? Non è sicuro su web), l'aggiunta di un default ascoltatore azzurro per il registro:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<sharedListeners>
<add name="AzureListener" type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<filter type="" />
</add>
</sharedListeners>
<sources>
<source name="MyTraceSource" switchValue="Verbose" >
<listeners>
<add name="AzureListener" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
"MyTraceSource"
è il nome della stringa che hai dato il tuo yo TraceSource
nel costruttore quando farlo tramite codice.
Oppure si può semplicemente creare un TraceSource
in codice come sopra, e aggiungere un Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener
alla sua collezione Listeners
credo che 'TraceInformation' è destinata ad essere per quello che si chiama verbose. –
@ 500-InternalServerError no, 'Information' e' Verbose' sono due livelli diversi – Jcl