2011-10-12 21 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该文本控制台线路由行