2011-10-12 54 views
1

我很抱歉,如果這已經得到解答,我已盡全力去尋找。我怎樣才能實現一個TextWriter爲每個寫入控制檯的行附加一個時間戳?

我有一個庫將一些信息寫入控制檯。在使用庫的應用程序中,我想將輸出重定向到控件以及日誌文件,同時在每行的開頭寫入時間戳。這是我的課是什麼樣子:

class TextBoxStreamWriter : TextWriter 
{ 
    TextBox _output; 
    FileStream _stream; 
    StreamWriter _writer; 

    // constructor 
    public TextBoxStreamWriter(TextBox output) 
    { 
     _output = output; 

     _stream = new FileStream(@"C:\example.log", FileMode.OpenOrCreate, FileAccess.Write); 
     _writer = new StreamWriter(_stream); 
     _writer.AutoFlush = true; 
    } 

    // override methods 
    public override void Write(char value) 
    { 
     base.Write(value); 
     _output.AppendText(value.ToString()); 
     _writer.Write(value); 
    } 
    public override void WriteLine(string value) 
    { 
     base.WriteLine(DateTime.Now.ToString("[yyyy/MM/dd HH:mm:ss]\t") + value); 
    } 

這似乎爲你使用當然Console.WriteLine()罰款,只要工作。但我們嘗試將XMLWriter的輸出引導到控制檯,繞過Console.WriteLine(),從而開始打印沒有時間戳的行。一個例子可能是這樣的:

protected void WriteXMLToConsole(XmlDocument xmlDocument) 
    { 
     XmlTextWriter writer = new XmlTextWriter(Console.Out); 
     writer.Formatting = Formatting.Indented; 
     xmlDocument.WriteContentTo(writer); 
     writer.Flush(); 
     Console.WriteLine(); 
    } 

有什麼建議?

感謝您的幫助!

+0

什麼是您的代碼實例化'TextBoxStreamWriter'是什麼樣子? –

+0

您可能希望查看NLog或log4Net等庫,而不是編寫自己的記錄器。它們非常易於使用,具有高性能(當您關閉日誌記錄時),非常易於配置,支持您想要做的記錄器類型,並支持自動記錄現有工具可讀的格式。您也可以將其插入到您的文本框中,並自動解決大部分此問題。 –

回答

0

這可能是因爲xmlDoc被接收爲包含NewLine的單個字符串。
嘗試讀取xmlDoc中,作爲一個純文本文件,並sendt該文本控制檯線路由行