2015-12-28 19 views
5

Soweit ich sehen kann, gibt es zwei Möglichkeiten, Trace-Nachrichten in .NET zu erstellen.Welche Trace-Quelle wird von System.Diagnostics.Trace.WriteLine verwendet?

  1. Die statischen Methoden der System.Diagnostics.Trace:

    Trace.WriteLine("Something happened"); 
    
  2. Die Instanzmethoden System.Diagnostics.TraceSource:

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

In meiner app.config-Datei, ich entweder eine Spur hinzufügen Hörer für alles:

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

oder für eine bestimmte Spur Quelle:

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

Meine Frage

Wenn ich die erste Methode (statische Methoden der System.Diagnostics.Trace), die Spurenquellenname wird eingesetzt?

Ich habe die MSDN page of System.Diagnostics.Trace überprüft, aber habe die Antwort nicht gefunden.

+0

I glaube nicht, dass es eine Quelle benutzt. Es verhält sich wie eine Art "globale Quelle". Zwei parallele APIs, wahrscheinlich ein historisches Relikt. –

+0

@HenkHolterman: Das ist durchaus möglich (Spurenquellen wurden in v2.0 hinzugefügt), aber ich habe noch keinen Beweis dafür gefunden. Es ist jedoch auch denkbar, dass sie eine spezifische Quelle für diese "Legacy" -Operationen hinzugefügt haben. – Heinzi

Antwort

3

überprüfte ich die Quelle Trace.WriteLine mit JustDecompile und Aufzählungen alle Zuhörer und sendet die Nachricht an alle:

   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(); 
          } 
         } 
        } 
       } 

Aber vergessen Sie diese hässlichen Trace Anrufe verwenden ETW Eventsource für ein much better tracing/logging

+0

Danke für Ihre Antwort. Leider sehe ich nicht, wie es die Frage beantwortet. – Heinzi