我正在使用next方法添加跟踪记录:
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>
答案 0 :(得分: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>
答案 1 :(得分:1)
您可以尝试Ukadc.Diagnostics from codeplex。该项目为System.Diagnostics提供了一些有用的扩展。在我看来,最酷的是它们提供的是基于令牌的系统,可用于定义日志/跟踪输出格式,类似于使用log4net和NLog可以实现的格式。它是仅配置依赖项。也就是说,如果你的代码已经在使用TraceSources,你只需要在你的机器上放置Ukadc.Diagnostics并让你的app.config指向他们的TraceListeners,PropertyTokens等。
您仍然使用System.Diagnostics.TraceSource对象检测代码。
在您的观点上,使用Ukadc.Diagnostics,您可以根据大多数属性令牌(包括EventId)进行过滤。
请注意,令牌系统只能用于(据我所知)Ukadc.Diagnostics中提供的相应TraceListeners(或您根据其基本TraceListener类编写的任何TraceListener)。
我没有在制作过程中使用过这个项目,但我已经愚弄了它,并且给我留下了深刻的印象。它运作良好,易于扩展。