C# 4.0 将console.writeLine()消息传输到文本文件

C# 4.0 将console.writeLine()消息传输到文本文件,c#-4.0,console-application,C# 4.0,Console Application,我想知道在实现一个记录器时,最好的方法是什么,它基本上会吃掉所有Console.WriteLine()消息,并输出所有这些消息的文本文件 我知道我可以使用StringBuilder并通过执行.AppendLine在控制台.WriteLine出现的任何地方填充所有消息…但我正在寻找比这更神奇的东西。使用某种方法,我不必像现有代码中的Console.WriteLines那样写那么多行代码 如果您错过了标记,这是针对C#4.0控制台应用程序的。我假设您想要的是写入标准输出和文件的流。也就是说,您希望所

我想知道在实现一个记录器时,最好的方法是什么,它基本上会吃掉所有
Console.WriteLine()
消息,并输出所有这些消息的文本文件

我知道我可以使用
StringBuilder
并通过执行
.AppendLine
控制台.WriteLine
出现的任何地方填充所有消息…但我正在寻找比这更神奇的东西。使用某种方法,我不必像现有代码中的
Console.WriteLine
s那样写那么多行代码


如果您错过了标记,这是针对C#4.0控制台应用程序的。

我假设您想要的是写入标准输出和文件的流。也就是说,您希望所有内容仍然显示在控制台上,但也希望将其写入文件。(如果只想将输出重定向到文件,可以从命令行执行此操作。)

您需要创建自己的
TextWriter
派生类,并让它执行实际输出。您可以调用
Console.SetOut
以使控制台写入您的
文本编写器

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
的有用实例。”


我做过类似的事情,效果非常好。

不要使用
控制台。在代码中写入
,使用
跟踪。写入
。然后在配置文件中,将
ConsoleTraceListener
附加到跟踪侦听器

这种技术将允许您进行跟踪,跟踪框架将把它输出到控制台和您设置的任何跟踪侦听器(在您的情况下可能是TextWriterTraceListener)


一些第三方库(log4not进入我的脑海)也允许封装所有日志机制。

还没有尝试过这一点……但听起来不错。把它作为答案。谢谢