代码之家  ›  专栏  ›  技术社区  ›  Aaron Powell

定义多个未运行的TraceSource

  •  0
  • Aaron Powell  · 技术社区  · 17 年前

    我是TraceSource的新手,所以我正在调查它如何可以/不能被使用(基本上是优点和缺点)。

    我喜欢的是,我可以从.NET framework本身中获取转储,因此我制作了一个小应用程序来测试这一点,并一起使用我自己的自定义源(我希望它能被使用),如下所示:

    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 SmtpClient 东西(即只使用我的自定义跟踪器)。

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

    1 回复  |  直到 17 年前
        1
  •  1
  •   Aaron Powell    17 年前

    发现问题,完全是noob错误,我的两个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>
    
    推荐文章