0

我是 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>

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

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

4

1 回答 1

1

发现了问题,一个完全的菜鸟错误,我的两个 TraceSource 项目都有一个正在写入同一个文件的监听器。虽然我不确定确切的错误,但在写作时会发生某种冲突。

如果你想使用同一个监听器有多个源,你需要使用<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>
于 2009-04-30T05:06:02.680 回答