定义多个未运行的TraceSource

时间:2009-04-30 02:36:44

标签: c# .net trace

我是TraceSource的新手,所以我正在调查它是如何使用/不能使用的(基本上是利弊)。

我喜欢的是我可以从.NET框架本身获取转储,所以我做了一个小应用程序来测试它并一起使用我自己的自定义源(因为我希望它是如此使用过),像这样:

class Program
{
    static void Main(string[] args)
    {
        SmtpClient smtp = new SmtpClient();
        var mm = new MailMessage();
        mm.To.Add("me@my-site.com");
        mm.Subject = "Trace Testing";
        smtp.Send(mm);

        var ts = new TraceSource("MyCustomTracer");

        ts.TraceEvent(TraceEventType.Error, 0, "This is an error");
        ts.TraceEvent(TraceEventType.Information, 0, "Just debugging now");
    }
}

然后我在App.config添加了一些听众:

<system.diagnostics>
<trace autoflush="true" />
<sources>
  <source name="MyCustomTracer"
          switchValue="Information, ActivityTracing">
    <listeners>
      <add name="sdt"
          type="System.Diagnostics.XmlWriterTraceListener"
          initializeData= "traceOutput.log" />
    </listeners>
  </source>
  <source name="System.Net"
          switchValue="Information, ActivityTracing, Critical">
    <listeners>
      <add name="sdt"
          type="System.Diagnostics.XmlWriterTraceListener"
          initializeData= "traceOutput.log" />
    </listeners>
  </source>
</sources>
</system.diagnostics>

但由于某些原因,当我运行应用时,我通过MyCustomTracer记录的2个事件不会进入日志文件,除非我注释掉SmtpClient的东西(即 - 只有我的使用自定义跟踪器)。

我原本以为可以按照我尝试使用它们的方式使用多个TraceSource,我只是不确定出了什么问题。

1 个答案:

答案 0 :(得分:1)

发现问题,一个完整的noob错误,我的TraceSource项目都有一个正在写入同一文件的Listener。虽然我不确定错误,但在写作时会发生某种冲突。

如果您想使用同一个侦听器拥有多个源,则需要使用<sharedListeners />,如下所示:

<system.diagnostics>
<trace autoflush="true" />
<sources>
  <source name="MyCustomTracer"
          switchValue="Information, ActivityTracing">
    <listeners>
       <add name="sdt" />
    </listeners>
  </source>
  <source name="System.Net"
          switchValue="Information, ActivityTracing, Critical">
    <listeners>
      <add name="sdt" />
    </listeners>
  </source>
</sources>
<sharedListeners>
    <add name="sdt"
        type="System.Diagnostics.XmlWriterTraceListener"
        initializeData= "traceOutput.log" />
</sharedListeners>
</system.diagnostics>