2013-04-01 2 views
5

Was ist der Unterschied zwischen "Switch" und "Filter" in Tracing in .NET? Sie scheinen ähnlich zu arbeiten.Was ist der Unterschied zwischen "Switch" und "Filter" in Tracing in .NET?

<system.diagnostics> 
    <trace autoflush="true" indentsize="5"> 
     <listeners> 
     <add name="DemoListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="D:\output1.txt"> 
     </add> 
     <remove name="Default" /> 
     </listeners> 
    </trace>  
    <sources> 
     <source name="DemoApp" switchName="DemoApp"> 
     <listeners> 
      <add name="DemoListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="D:\output2.txt"> 
      <filter type="System.Diagnostics.EventTypeFilter" initializeData="Error"/> 
      </add> 
      <remove name="Default" /> 
     </listeners> 
     </source> 
    </sources> 
    <switches> 
     <add name="DemoApp" value="Error"/> 
    </switches> 
    </system.diagnostics> 

Antwort

6

Es gibt ein bisschen Überlappung. A <filter> benennt eine bestimmte Klasse, die Sie schreiben, die von TraceFilter abgeleitet ist. Mit dem Sie die Trace-Ausgabe unterdrücken können, ist alles möglich. Es gilt immer für einen bestimmten TraceListener.

Das Element <switches> ist nützlich, um die Ablaufverfolgung zu konfigurieren und den Wert eines TraceSwitch-Objekts festzulegen. Welche Sie dann in Ihrem Code testen, um die Trace-Ausgabe selektiv zu umgehen. Beachten Sie, dass <switches> "global" ist und nicht für einen bestimmten Listener gilt. Ein logischer Ort, um den Switch zu testen, ist also in der TraceSource. Ein guter Zweck für einen Switch ist es, die Tracing-Ausführlichkeit zu konfigurieren. Wie Ihr "Error" Wert würde anzeigen, dass nur Fehler jemals zurückverfolgt werden.

+1

Mit anderen Worten: Das '' Element beschränkt die an die Listener gesendeten Eingangsnachrichten und das '' Element beschränkt die Nachrichten, die der Listener ausgibt. – Suncat2000

Verwandte Themen