2

我正在使用下一个方法添加跟踪记录:

TraceSource.TraceEvent(TraceEventType, Int32, String)

其中 Int32 表示事件 ID。

那么如何在 TraceSwitch 中进行过滤以仅通过指定的事件 id 进行侦听?这是不可能的吗?

<system.diagnostics>
    <sources>
        <source name="MyTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch>"
            <listeners>
                <add name="console" type="System.Diagnostics.ConsoleTraceListener" />
            </listeners>
        </source>
    </sources>
    <switches>
        <add name="sourceSwitch" value="?" />
    </switches>
</system.diagnostics>
4

2 回答 2

5

这是可能的,但您需要编写自定义TraceFilter并覆盖ShouldTrace方法。id 被传递给它,但没有开箱即用的过滤器支持它。

然后,您可以在 .config 文件中像这样声明它:

<source name="MyTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch">
  <listeners>
    <add name="console" type="System.Diagnostics.ConsoleTraceListener">
      <filter type="YourNamespace.YourFilter, YourAssembly, ..." />
    </add>
  </listeners>
</source>
于 2010-12-16T18:40:52.113 回答
1

您可以从 codeplex 尝试Ukadc.Diagnostics。该项目为 System.Diagnostics 提供了一些有用的扩展。在我看来,他们提供的最酷的东西是基于令牌的系统,可用于定义日志/跟踪输出格式,类似于使用 log4net 和 NLog 可以实现的。它是仅配置依赖项。也就是说,如果您的代码已经在使用 TraceSources,您只需将 Ukadc.Diagnostics 放在您的机器上,并让您的 app.config 指向它们的 TraceListeners、PropertyTokens 等。

您仍然使用 System.Diagnostics.TraceSource 对象检测您的代码。

就您而言,使用 Ukadc.Diagnostics 您可以根据大多数属性令牌(包括 EventId)进行过滤。

请注意,令牌系统只能(据我所知)与 Ukadc.Diagnostics 中提供的相应 TraceListener(或您基于其基本 TraceListener 类编写的任何 TraceListener)一起使用。

我没有在生产中使用过这个项目,但我已经玩了很多次并且印象深刻。它运行良好并且易于扩展。

于 2010-12-16T20:27:41.317 回答