【问题标题】:Pipe console.writeLine() messages to a text file管道 console.writeLine() 消息到文本文件
【发布时间】:2011-09-29 23:06:58
【问题描述】:

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

我知道我可以使用StringBuilder 并通过在出现Console.WriteLine 的任何地方执行.AppendLine 来填充所有消息......但我正在寻找比这更神奇的东西。使用某种方式,我不必在现有代码中编写与Console.WriteLines 一样多的代码行。

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

【问题讨论】:

    标签: c#-4.0 console-application


    【解决方案1】:

    不要在代码中使用Console.Write,而是使用Trace.Write。然后在配置文件中,将ConsoleTraceListener 附加到跟踪侦听器。

    此技术将允许您进行跟踪,并且跟踪框架会将其输出到控制台和您设置的任何跟踪侦听器(在您的情况下可能是 TextWriterTraceListener)。

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

    【讨论】:

      【解决方案2】:

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

      您需要创建自己的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 方法。正如documentation 所说,“派生类必须至少实现TextWriter.Write(Char) 方法才能创建有用的TextWriter 实例。”

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

      【讨论】:

      • 还没有尝试过……但听起来不错。将其标记为答案。谢谢!
      猜你喜欢
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多