如何通过事件ID侦听的过滤跟踪?
-
11-10-2019 - |
题
我正在使用下一个方法添加跟踪记录:
TraceSource.TraceEvent(TraceEventType, Int32, String)
其中INT32代表事件ID。
那么,如何在TraceWitch中过滤以仅通过指定的事件ID收听? ir这是不可能的吗?
<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>
解决方案
有可能,但您需要编写一个自定义 跟踪窗 并覆盖 应该训练 方法。 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>
其他提示
你可以试试 ukadc.codeplex的诊断. 。该项目为System.Diagnostics提供了一些有用的扩展。在我看来,它们提供的最酷的东西是基于令牌的系统,可用于定义与log4net和nlog相似的日志/跟踪输出格式。这是仅配置的依赖性。也就是说,如果您的代码已经在使用TraceSources,则只需将UKADC.Diagnostics放在计算机上,然后将您的App.config指向其tracelisteners,propertyTokens,etct,等等。
您仍然使用system.diarostics.traceource对象来仪器代码。
就您而言,使用ukadc.diagnostics您可以根据大多数属性令牌(包括EventID)过滤。
请注意,只有(据我所知)即可使用UKADC中提供的相应的Tracelisteners(或您根据其基于基本tracelisterister class)编写的任何tracelistener(或者)使用。
我没有在生产中使用这个项目,但是我愚弄了它很多,并给人留下了深刻的印象。它运行良好,易于扩展。
不隶属于 StackOverflow