我需要有关如何让我的C#控制台应用程序通过标准输出向用户显示文本的建议,同时仍然可以在以后访问它.我想实现的实际功能是在程序执行结束时将整个输出缓冲区转储到文本文件中.
我使用的解决方法,虽然我找不到更清晰的方法是子类TextWriter
重写写入方法,所以他们都会写入文件并调用原始的stdout编写器.像这样的东西:
public class DirtyWorkaround { private class DirtyWriter : TextWriter { private TextWriter stdoutWriter; private StreamWriter fileWriter; public DirtyWriter(string path, TextWriter stdoutWriter) { this.stdoutWriter = stdoutWriter; this.fileWriter = new StreamWriter(path); } override public void Write(string s) { stdoutWriter.Write(s); fileWriter.Write(s); fileWriter.Flush(); } // Same as above for WriteLine() and WriteLine(string), // plus whatever methods I need to override to inherit // from TextWriter (Encoding.Get I guess). } public static void Main(string[] args) { using (DirtyWriter dw = new DirtyWriter("path", Console.Out)) { Console.SetOut(dw); // Teh codez } } }
看到它一直写入并刷新文件.我只想在执行结束时才这样做,但我找不到任何方法来访问输出缓冲区.
另外,请原谅上述代码的不准确之处(不得不临时写,抱歉;).
对此的完美解决方案是将log4net与控制台appender和文件追加器一起使用.还有许多其他appender也可用.它还允许您在运行时关闭和打开不同的appender.