2014-01-25 85 views
2

我正在使用以下代碼來記錄異常,但它沒有將任何日誌寫入文件「mylistener.log」。我在這裏錯過了什麼?無法使用C#中的TraceSource方法寫入日誌文件

using System; 
using System.Diagnostics; 

namespace TraceSourceApp 
{ 
    class Program 
    { 
     private static TraceSource mySource = new TraceSource("TraceSourceApp"); 
     static void Main(string[] args) 
     {   
      TextWriterTraceListener textListener = 
       new TextWriterTraceListener("myListener.log"); 

      mySource.Listeners.Add(textListener); 
      int i = 10, j = 0, k; 
      try 
      { 
       k = i/j; 
      } 
      catch 
      { 
       mySource.TraceEvent(TraceEventType.Error, 12, 
        "Division by Zero"); 
      }  
      mySource.Close();    
     }   
    } 
} 
+0

你有編譯時常量TRACE的定義嗎?我寫了Trace.AutoFlush = true後寫了 –

回答

2

爲了使TraceSource將數據寫入到文件,你需要將TraceSource的Switch - 屬性設置爲SourceSwitch實例。更改您的代碼如下:

static void Main(string[] args) 
{ 
    TextWriterTraceListener textListener = new TextWriterTraceListener("myListener.log"); 
    // New code starts here 
    var sourceSwitch = new SourceSwitch("SourceSwitch", "Verbose"); 
    mySource.Switch = sourceSwitch; 
    // New code ends here 
    mySource.Listeners.Add(textListener); 
    // ... 

除了有TraceWriter自動刷新其內容,在你的主要方法的開頭設置Trace.AutoFlush(樣品工作沒有它,但它始終是一個好主意,以確保該監聽器,以便沖洗不丟失日誌條目):

textListener.Flush(); 
mySource.Close(); 

static void Main(string[] args) 
{ 
    Trace.AutoFlush = true; 
    // ... 

作爲替代方案,你也可以通過在最後調用其Flush - 方法沖洗聽衆明確

在現實世界的代碼中,我建議添加一個try-finally或者使用block來聲明Flush被調用並且源代碼被關閉。

+0

;行,它不存儲traceevent輸出。同樣的結果獲得textListener.Flush() – Gomathipriya

+0

@Gomathipriya:是的,你是對的,原因是缺少開關。我已經更新了示例。 – Markus

+0

它現在正在工作。爲什麼需要這個開關? – Gomathipriya

相關問題