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

Bri*_*rij 5 .net trace system.diagnostics filter switch-statement

在.NET中跟踪中"switch"和"filter"有什么区别?他们似乎以类似的方式工作.

<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>
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 6

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

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