管console.writeLine()消息到一个文本文件(Pipe console.writeLi

2019-09-27 16:37发布

我想最好的办法是在实施记录仪基本上吃什么都Console.WriteLine()消息,并吐出了所有这些信息的文本文件。

我知道我可以使用StringBuilder ,并做所有的消息来填充它.AppendLine哪里Console.WriteLine发生......但我要寻找的东西比这更神奇。 某种方式使用它,我没有写代码一样多的行Console.WriteLine在现有代码秒。

而如果你错过了标签,这是一个C#4.0的控制台应用程序。

Answer 1:

我想,你希望那是什么写入到标准输出和文件流。 也就是说,你想要的一切仍然显示在控制台上,但你也希望它被写入文件。 (如果你只是想输出重定向到一个文件,你可以做到这一点的命令行。)

您需要创建自己TextWriter派生类,并将它做实际的输出。 你叫Console.SetOut使控制台写你TextWriter

class ConsoleLogger: TextWriter
{
    private TextWriter ConsoleOutputStream;
    private StreamWriter LogOutputStream;
    public ConsoleLogger(string logFilename)
    {
        ConsoleOutputStream = Console.Out;
        // Initialize your log file
        LogOutputStream = new StreamWriter(logFilename);
    }

    public void Write(string s)
    {
        ConsoleOutputStream.Write(s);
        LogOutputStream.Write(s);
    }

    // Other Write functions format their arguments and call Write(string).
}

并在程序中使用此:

private ConsoleLogger MyLogger;
const string LogFilename = "ConsoleLog.txt";
void Main()
{
    MyLogger = new ConsoleLogger(LogFilename);
    Console.SetOut(MyLogger);
}

你不必重写所有TextWriter方法。 由于文档说,“派生类必须至少实现TextWriter.Write(Char)方法,使一个有用的实例TextWriter 。”

我做了一些与此类似,它工作得很好。



Answer 2:

而不是使用Console.Write在你的代码,使用Trace.Write 。 然后在配置文件中,追加ConsoleTraceListener跟踪侦听。

这种技术可以让你追踪和跟踪框架,将其输出既控制台和任何跟踪侦听您设置(可能TextWriterTraceListener会在你的情况)。

一些第三方的LIB(log4not进入我的心)允许所有的日志机制封装了。



文章来源: Pipe console.writeLine() messages to a text file