【问题标题】:Auto-load trace listener to all new trace sources将跟踪侦听器自动加载到所有新的跟踪源
【发布时间】:2012-05-12 00:15:34
【问题描述】:

我正在转换一些代码以使用 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 自动添加到我创建的任何新跟踪源中,而无需像现在这样查找它。这可能吗?

【问题讨论】:

    标签: c# trace system.diagnostics tracelistener


    【解决方案1】:

    在配置中定义跟踪源及其监听器:

    <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 覆盖),不要向它添加任何侦听器并将其记录为正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 2016-05-12
      • 2013-04-15
      相关资源
      最近更新 更多