2017-08-24 46 views
1

的替代目的地我是一個相對較新的.net世界,我有一個解決方案,其中有數百個Debug.Writeline和Debug.Write。 我需要將消息發送到文本文件和數據庫,而不是傳統的輸出。如何連接Debug.Writeline()和Debug.Write()

替換所有Debug.XXX行並將這些特定消息發送到我的目標是枯燥且不推薦的任務。

那麼我應該如何連接另一個目的地?

一種方法是重寫Debug.Write()功能,該功能不起作用。

好心幫我,在此先感謝

+0

請注意,在RELEASE-build中,所有對「Debug.WriteLine」及其兄弟的調用均被**刪除。 –

回答

4

可以繼承自己TraceListener

public class MyTraceListener : TraceListener 
{ 
    // called (in debug-mode) when Debug.Write() is called 
    public override void Write(string message) 
    { 
     // handle/output "message" properly 
    } 
    // called (in debug-mode) when Debug.WriteLine() is called 
    public override void WriteLine(string message) 
    { 
     // handle/output "message" properly 
    } 
} 

然後,您需要註冊這個類的一個實例(使用Trace.Listeners.Add()

var myListener = new MyTraceListener(); 
Trace.Listeners.Add(myListener); 

現在所有致電Debug.Write() a nd Debug.WriteLine()被轉發到您的MyTraceListener實例的相應方法。 注意但是,這隻發生在調試版本中。在RELEASE版本中,對Debug.Write()Debug.WriteLine()的調用不會執行任何操作。

+0

感謝真正有幫助我只需要在Debug版本中使用,但是由於我的經驗不足,我有疑問,只創建一個示蹤器實例將解決包含10個以上項目的整個解決方案中的問題?如果是的話,那麼可能是創建實例的最佳位置。對不起,如果被告知某事超出 –

+0

@ManojKalluri是的,每**進程**一個監聽器就足夠了(無論該進程加載了多少個程序集)。在哪裏放置代碼取決於你的解決方案架構,我不能告訴你。 –