Как я могу реализовать TextWriter для добавления метки времени к каждой строке, записываемой в консоль? - PullRequest
1 голос
/ 12 октября 2011

Приношу свои извинения, если на этот вопрос уже был дан ответ, я старался изо всех сил посмотреть.

У меня есть библиотека, которая записывает некоторую информацию в консоль. В приложении, которое использует библиотеку, я хотел бы перенаправить этот вывод в элемент управления, а также в файл журнала, при этом записывая метку времени в начале каждой строки. Вот как выглядит мой класс:

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();
    }

Есть предложения?

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 13 октября 2011

Вероятно, потому, что xmlDoc получен как одна строка, содержащая NewLine.
Попробуйте прочитать xmlDoc в виде простого текстового файла и построчно отправить этот текст в консоль

...