【问题标题】:Can I turn off tracing for a single assembly that my code references?我可以关闭对我的代码引用的单个程序集的跟踪吗?
【发布时间】:2012-08-14 21:56:06
【问题描述】:

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

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

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

我在我们的外观项目中尝试了各种不同的配置方式,通常如下所示,但无济于事。我尝试添加与首先设置日志记录的<add> 元素匹配的<remove> 元素,尝试<clear>ing 他们,设置<trace enabled="false"> 和至少其他三个尝试。感谢您提供的任何帮助!

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

【问题讨论】:

    标签: c# trace system.diagnostics


    【解决方案1】:

    您可以编写自己的跟踪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>
    

    【讨论】:

      【解决方案2】:

      使用 TraceSource。

      1. 在您的跟踪源中对其进行初始化。

        TraceSource logger = new TraceSource("Class1");

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

        logger.TraceInformation("Hello from Class1");

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

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

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

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

      完全关闭它:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        相关资源
        最近更新 更多