Определение нескольких TraceSources не работает - PullRequest
0 голосов
/ 30 апреля 2009

Я новичок в 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>

Но по какой-то причине, когда я запускаю приложение, 2 события, которые я регистрирую через MyCustomTracer, не попадают в файл журнала, пока я не закомментирую материал SmtpClient (т.е. - используется только мой собственный трассировщик) ,

Я бы ожидал, что несколько источников TraceSource могут использоваться так, как я пытаюсь их использовать, я просто не уверен, что происходит не так.

1 Ответ

1 голос
/ 30 апреля 2009

Обнаружена проблема, полная ошибка 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>
...