自动加载跟踪侦听器到所有新的跟踪源

时间:2012-05-02 13:52:22

标签: c# trace tracing system.diagnostics tracelistener

我正在转换一些代码以使用Microsoft跟踪。我想要的是在一个项目中定义所有侦听器,然后从其他程序集中使用它们,而不必在那里显式加载它们。

澄清一下,这就是我现在正在做的事情:

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
    <system.diagnostics>
      <trace autoflush="true">
        <listeners>
          <add name="myListener" type="ConsoleApplication4.LogListener, ConsoleApplication4"/>
          <remove name="Default" />
        </listeners>
      </trace>
    </system.diagnostics>
  </configuration>

在C#代码中:

var b = Trace.Listeners;
TraceSource tr = new TraceSource("Blah", SourceLevels.All);
tr.Listeners.Add(b["myListener"]);
tr.TraceEvent(TraceEventType.Warning, 5, "Hello");

我希望将myListener自动添加到我创建的任何新跟踪源中,而无需按照我现在的方式进行查找。这可能吗?

1 个答案:

答案 0 :(得分:1)

在config中定义跟踪源及其侦听器:

<system.diagnostics>
  <sources>
    <source name="Blah" switchValue="Warning">
      <listeners>
        <add name="myListener" />
      </listeners>
    </source>
  </sources>
  <!-- Note these are in sharedListeners rather than trace -->
  <sharedListeners>
    <add name="myListener" ... />
  </sharedListeners>
  <!-- Autoflush still works as expected -->
  <trace autoflush="true" />
</system.diagnostics>

然后以您已有的方式在代码中构造TraceSource(其跟踪级别将被配置中的switchValue覆盖),添加任何侦听器并登录到这是正常的。