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进入我的脑海)也允许封装所有日志机制。还没有尝试过这一点……但听起来不错。把它作为答案。谢谢