我想最好的办法是在实施记录仪基本上吃什么都Console.WriteLine()
消息,并吐出了所有这些信息的文本文件。
我知道我可以使用StringBuilder
,并做所有的消息来填充它.AppendLine
哪里Console.WriteLine
发生......但我要寻找的东西比这更神奇。 某种方式使用它,我没有写代码一样多的行Console.WriteLine
在现有代码秒。
而如果你错过了标签,这是一个C#4.0的控制台应用程序。
我想最好的办法是在实施记录仪基本上吃什么都Console.WriteLine()
消息,并吐出了所有这些信息的文本文件。
我知道我可以使用StringBuilder
,并做所有的消息来填充它.AppendLine
哪里Console.WriteLine
发生......但我要寻找的东西比这更神奇。 某种方式使用它,我没有写代码一样多的行Console.WriteLine
在现有代码秒。
而如果你错过了标签,这是一个C#4.0的控制台应用程序。
我想,你希望那是什么写入到标准输出和文件流。 也就是说,你想要的一切仍然显示在控制台上,但你也希望它被写入文件。 (如果你只是想输出重定向到一个文件,你可以做到这一点的命令行。)
您需要创建自己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
。”
我做了一些与此类似,它工作得很好。
而不是使用Console.Write
在你的代码,使用Trace.Write
。 然后在配置文件中,追加ConsoleTraceListener
跟踪侦听。
这种技术可以让你追踪和跟踪框架,将其输出既控制台和任何跟踪侦听您设置(可能TextWriterTraceListener会在你的情况)。
一些第三方的LIB(log4not进入我的心)允许所有的日志机制封装了。