My apologies if this has already been answered, I've tried my best to look.
I have a library that writes some information to the console. In the application that uses the library, I'd like to redirect that output to a control as well as a log file, while writing a timestamp at the beginning of each line. This is what my class looks like:
class TextBoxStreamWriter : Te开发者_如何学运维xtWriter
{
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);
}
This seems to work fine as long as you're using Console.WriteLine()
of course. But we I try to direct the output of an XMLWriter to the console, this bypasses Console.WriteLine()
, and thereby starts printing lines without the timestamp. One example could be this:
protected void WriteXMLToConsole(XmlDocument xmlDocument)
{
XmlTextWriter writer = new XmlTextWriter(Console.Out);
writer.Formatting = Formatting.Indented;
xmlDocument.WriteContentTo(writer);
writer.Flush();
Console.WriteLine();
}
Any suggestions?
Thanks for your help!
It's probably because the xmlDoc is recieved as a single string containing NewLine.
Try reading the xmlDoc as a plain text-file, and sendt that text to console line-by-line
精彩评论