2013-03-19 83 views
2

我正在使用TraceSource來記錄ASP.Net應用程序。 要更改輸出格式,我需要創建自己的TraceListener而不是TextwriterListener。TraceSource:自定義TraceListener不起作用

<trace> 
     <listeners> 
      <remove name="Default" /> 
      <add name="Default" 
      type="WebTracing.CustomTraceListener, WebTracing" initializeData="Weblog.txt" traceOutputOptions="None"/> 
     </listeners> 
    </trace> 

public class CustomTraceListener : TextWriterTraceListener 
{ 
    public override void Write(string message) 
    { 
     if (NeedIndent) 
     { 
      WriteIndent(); 
     } 
     message = //customize format 
     base.Write(message); 
    } 

    public override void WriteLine(string message) 
    { 
     if (NeedIndent) 
     { 
      WriteIndent(); 
     } 
     message = //customize format 
     base.WriteLine(message); 
     NeedIndent = true; 
    } 
} 

//調用

 CustomTraceListener obj = new CustomTraceListener(); 
     obj.TraceEvent(null, "This is a critical message", TraceEventType.Critical, 0); 
     (or) 
     obj.Write("This is a critical message"); 
     obj.Close(); 

沒有錯誤。沒有數據打印在輸出文件中。 我是ASP.Net的新手,任何人都可以幫助我解決這個問題。

更新


我嘗試另一種方式。但是會導致配置錯誤。

<trace autoflush="true" /> 
<sources> 
    <source name="Trace" switchName="mySwitch" switchType="System.Diagnostics.SourceSwitch">  
     <listeners> 
     <remove name="Default" /> 
     <add name="Default" 
      type="WebTracing.CustomTraceListener, WebTracing" initializeData="Weblog.txt" traceOutputOptions="None"/> 
     </listeners>  
    </source> 
</sources> 
<switches> 
    <add name="mySwitch" value="All"/> 
</switches> 


     TraceSource obj = new TraceSource("Trace"); 
     obj.TraceEvent(TraceEventType.Critical,0,"This is a critical message"); 
     obj.Close(); 

異常詳細信息:System.Configuration.ConfigurationErrorsException:無法創建WebTracing.CustomTraceListener,WebTracing。

注:正常TextWriterListener工作正常。但我需要自定義偵聽器來格式化輸出字符串。

+0

你的任何機會解決呢? – Mr767267 2016-11-27 10:30:19

回答

0

我建議你到公共修飾符添加到類

你也可以使用

System.Diagnostics.Trace.Write method 
+0

感謝您的回覆。我努力了。不過它仍然是相同的 – 2013-03-19 14:38:51

+0

樂意幫助你,但你checed輸出窗口 – 2013-03-19 15:24:56

+0

Trace.write()表示在file.Normal TextWriterListener輸出window.not工作正常與TraceSource。但我需要擴展TextWriterListener的CustomListener來格式化輸出。請參閱我的更新。 – 2013-03-20 06:24:13

0

不要直接寫入跟蹤監聽器。在這種情況下,System.Diagnostic.Trace對象將寫入Trace Listener。如果您使用的是TraceSources,那麼您會向跟蹤源和配置文件寫入信息,讓TraceSource知道哪些偵聽器已註冊接收跟蹤信息。

另外,您正在寫入一個通常有刷新間隔的文件,因此您可能需要確保它是自動刷新,或者在您的測試中寫入足夠的數據以觸發刷新(寫入數據時到文件)。

+0

感謝您的回覆。如果我使用System.Diagnostic.Trace,它不會激發我的customListener的overriden方法,顯然它在輸出文件中沒有寫任何內容。請參閱我嘗試使用TraceSource的更新,它用於默認textwriterListener,但不適用於customListener。 – 2013-03-20 06:21:02

+0

另一種可能性是類型錯誤。有時你必須擺弄裝配和打字。 http://www.codeproject.com/Tips/352679/Get-Assembly-full-name-from-Visual-Studio-VersionN抱歉,我沒有時間創建示例應用程序並測試我的理論。 – MatthewMartin 2013-03-20 15:21:41

0

只要改變爲絕對initializeData="d:\Weblog.txt"您的相對路徑initializeData="Weblog.txt"。我仍然在嘗試檢測爲什麼創建自定義列表日誌文件不適用於我們的根本原因。

我想這可能是因爲沒有配置項目文件夾權限:SO link


我今天轉載了同樣的問題,我看到您的應用程序配置正確。我花了幾個小時才明白正確的配置不足以使用定製偵聽器創建日誌文件。

當我執行TextWriterTraceListener會在項目的文件夾中創建日誌。 但是CustomTextWriterTraceListener不會創建任何內容。