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

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(或者)使用。

我没有在生产中使用这个项目,但是我愚弄了它很多,并给人留下了深刻的印象。它运行良好,易于扩展。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top