2009-04-30 12 views
0

我是TraceSource的新成員,因此我正在對它如何使用/不能使用(基本上有利有弊)進行一些調查。定義多個未運行的TraceSources

我喜歡的是,我可以從.NET框架本身獲得轉儲,所以我做了一個小應用程序來測試它並使用我自己的自定義源代碼(因爲這是我期望的使用),像這樣:

class Program 
{ 
    static void Main(string[] args) 
    { 
     SmtpClient smtp = new SmtpClient(); 
     var mm = new MailMessage(); 
     mm.To.Add("[email protected]"); 
     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東西(即 - 只有我的自定義示蹤劑使用)。

我原本以爲可以以我嘗試使用它們的方式使用多個TraceSources,我只是不確定發生了什麼問題。

回答

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>