我可以关闭我的代码引用的单个程序集的跟踪吗?

时间:2012-08-18 23:07:10

标签: c# tracing system.diagnostics

我有一个特定的代码框架,我有一个TraceListener定义有两个原因:

  • 与我们通过Trace.Write完成的许多旧日志记录的后兼容性,直到我们更新它,并且
  • 如果需要的话,能够检测我们的代码引用的其他程序集是很好的。

但是,我有一个程序集(不是我们的)记录了很多无意义的数据,无法帮助我们调试任何东西。如何关闭这个程序集的跟踪(或者,我们围绕它构建的外观项目),同时将其留给应用程序的其余部分?

我在外观项目中尝试过各种各样的配置,通常看起来如下,但无济于事。我尝试添加与<remove>元素匹配的<add>元素,这些元素首先设置了日志记录,尝试<clear>,设置<trace enabled="false">和至少三次其他尝试。感谢您提供的任何帮助!

<system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <clear/>
      </listeners>
    </trace>
    <switches>
    </switches>
  </system.diagnostics>

2 个答案:

答案 0 :(得分:3)

您可以编写自己的跟踪filter,以便与TraceListener一起使用。在此过滤器中,您可以在stackTrace中查找程序集并关闭事件跟踪。

在我的例子中,我根据EventTypeFilter编写了过滤器(参见:DotNetOpenAuthFilter),它只过滤来自DotNetOpenAuth库的事件。

然后将过滤器连接到web.config中的侦听器:

<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add name="console" type="System.Diagnostics.ConsoleTraceListener" >
          <filter type="Common.Log.DotNetOpenAuthFilter, Common" initializeData="Warning" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

答案 1 :(得分:0)

使用TraceSource。

  1. 在跟踪源中初始化它。

    logger.TraceInformation("Hello from Class1");

  2. 从代码中的关键点调用它:

    <system.diagnostics> <trace autoflush="true"/> <sources> <source name="Class1" switchName="Class1Switch" switchType="System.Diagnostics.SourceSwitch"> <listeners> <add name="console"></add> <add name="csv" /> <!-- or you can add your own listener here --> </listeners> </source> </sources> <switches>
    <add name="Class1Switch" value="Information" />
    </switches> <sharedListeners> <add name="console" type="System.Diagnostics.ConsoleTraceListener" /> <add name="csv" type="System.Diagnostics.DelimitedListTraceListener" delimiter="|" initializeData="d:\data\tracing\trace.log" traceOutputOptions="Timestamp, ThreadId, LogicalOperationStack, DateTime, ProcessId"> </add> </sharedListeners> </system.diagnostics>

  3. 请务必编辑您的应用程序配置:

  4. <add name="Class1Switch" value="Error" />

    如果说,您只想记录错误,请更改开关:

    <add name="Class1Switch" value="Off" />
    

    完全关闭它:

    Random