2015-12-28 13 views
5

Per quanto posso vedere, ci sono due modi per creare messaggi di traccia in .NET.Quale origine traccia viene utilizzata da System.Diagnostics.Trace.WriteLine?

  1. I metodi statici della System.Diagnostics.Trace:

    Trace.WriteLine("Something happened"); 
    
  2. Metodi l'istanza di System.Diagnostics.TraceSource:

    var ts = new TraceSource("TraceTest"); 
    ts.TraceInformation("Something happened"); 
    

Nel mio file app.config, posso aggiungere una traccia ascoltatore per tutto:

<system.diagnostics> 
    <trace> 
     <listeners> 
      ... 
     </listeners> 
    </trace> 
</system.diagnostics> 

o per una particolare fonte di traccia:

<system.diagnostics> 
    <sources> 
     <source name="..."> 
      <listeners> 
       ... 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

La mia domanda

Se uso il primo metodo (metodi statici della System.Diagnostics.Trace), il cui nome di origine traccia si usa?

Ho controllato il MSDN page of System.Diagnostics.Trace, ma non ho trovato la risposta lì.

+0

I non pensare che usi una fonte. Funziona come una sorta di "fonte globale". Due API parallele, probabilmente una reliquia storica. –

+0

@HenkHolterman: Questo è abbastanza possibile (le fonti di traccia sono state aggiunte nella versione 2.0), ma non ho ancora trovato prove per questo. Tuttavia, è anche ipotizzabile che abbiano aggiunto una fonte specifica per quelle operazioni "legacy". – Heinzi

risposta

3

ho controllato la fonte di Trace.WriteLine con JustDecompile ed enumerazioni tutti gli ascoltatori e invia il messaggio a tutti:

   foreach (TraceListener listener in TraceInternal.Listeners) 
       { 
        if (listener.IsThreadSafe) 
        { 
         listener.WriteLine(message); 
         if (!TraceInternal.AutoFlush) 
         { 
          continue; 
         } 
         listener.Flush(); 
        } 
        else 
        { 
         lock (listener) 
         { 
          listener.WriteLine(message); 
          if (TraceInternal.AutoFlush) 
          { 
           listener.Flush(); 
          } 
         } 
        } 
       } 

Ma dimenticare questo brutto chiamate Trace, utilizzare ETW Eventsource per un much better tracing/logging

+0

Grazie per la risposta. Sfortunatamente, non vedo come risponde alla domanda. – Heinzi

Problemi correlati