在.NET中跟踪中“switch”和“filter”有什么区别?

时间:2013-04-01 11:28:58

标签: .net filter switch-statement tracing system.diagnostics

.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>

1 个答案:

答案 0 :(得分:6)

有一些重叠。 <filter>命名您编写的特定类,该类派生自TraceFilter。您可以使用它来抑制跟踪输出,一切皆有可能。它始终适用于特定的TraceListener。

<switches>元素可用于配置跟踪并设置TraceSwitch对象的值。然后,您可以在代码中测试以选择性地绕过跟踪输出。请注意<switches>是“全局”的,它不适用于特定的侦听器。因此,测试交换机的逻辑位置在TraceSource中。交换机的一个很好用途是配置跟踪详细程度。与“错误”值类似,表示只跟踪错误。