6

我有一个特定的代码框架,并且出于两个原因定义了一个 TraceListener:

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

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

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

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

2 回答 2

3

您可以编写自己的跟踪过滤器,与 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>
于 2012-10-04T11:55:57.370 回答
0

使用跟踪源。

  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" />
于 2016-02-11T09:06:44.147 回答