【问题标题】:How to Log Console Screen into a Text File? [duplicate]如何将控制台屏幕记录到文本文件中? [复制]
【发布时间】:2011-04-22 15:52:52
【问题描述】:

可能重复:
Mirroring console output to a file

我有一个 C# 控制台应用程序,我想登录一个文本文件,每个文本都出现在屏幕上。该怎么做?

不幸的是,尽管我对Mirroring console output to a file 发表了评论,但该主题已关闭。该线程接受的作为答案的帖子不正确。那么为什么不能再问这个问题呢?我以交互方式使用控制台,并希望将控制台上的所有文本复制到文本文件中。求救

【问题讨论】:

  • 这个问题的有趣之处在于,接受的答案只是另一个“如何将文本写入控制台”。在问这个问题之前我试过了。它添加了两个侦听器(文本和控制台),当他写入 Trace 时,它​​出现在控制台和文本文件中。
  • @Xaqron:这不是你想要的吗?您到底在寻找什么?
  • 这就是我想要的(正如问题的标题所说),但答案是关于如何同时写入文本文件和控制台,并且它被问题所有者接受!我想将一个文本文件绑定到控制台,不管谁在写控制台。事实上,我正在使用控制台来调试多线程应用程序,但测试需要几个小时,而且我不想丢失控制台文本。我不会实现日志记录,因为我只是在屏幕上显示我想要的东西。我想要屏幕,所以输出重定向(>>)不是我的选择。
  • 那么,您的意思是您根本无法修改控制台应用程序?
  • @Xaqron - 这不是 Stack Overflow 的工作方式。 “接受的答案”仅意味着答案对 OP 有效,而不是一定是正确的答案。如果您认为这是错误的,并希望引起更多关注,为什么不在另一个问题上附上bounty?

标签: c# logging console text-files


【解决方案1】:
C:\>yourconsoleapp.exe > yourtextfile.txt

编辑:假设您的控制台应用不需要用户输入。

【讨论】:

【解决方案2】:

将所有对 Console 类的引用替换为 System.Diagnostics.Trace 类。您可以添加一个 ConsoleTraceListener 和一个 TextWriterTraceListener,然后您输出到控制台的所有内容都将在这两个地方结束。

【讨论】:

  • 它可以工作,但是如果我不想用其他任何东西替换我的 Console.Write() 怎么办。有没有不丢屏的解决方案?
  • 设置跟踪类也写入屏幕。
【解决方案3】:

您可以使用Console.SetOut 将输出重定向到文件,但是除非您使用流式传输到两者的 TextWriter,否则您也不会将输出发送到控制台。

您可以尝试使用System.Diagnostics.Trace,然后将侦听器添加到控制台和文件中。

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="configConsoleListener"
             type="System.Diagnostics.ConsoleTraceListener" />
        <add name="fileLogger" 
             type="System.Diagnostics.TextWriterTraceListener" 
             initializeData="LogFile.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
 </configuration>

【讨论】:

  • 如果这是最好的选择,我更喜欢在我的代码中保留冗余而不是处理配置文件。
【解决方案4】:

这可能过于简单,但在命令提示符下,如果您这样做:

C:\>MyApplication >> output.txt

这会将给定应用程序的所有输出写入 output.txt

如果您实际上不需要编程解决方案,这可能会解决问题。

【讨论】:

    【解决方案5】:

    一个简单的谷歌搜索结果:here

    抱歉,我不再使用 C# 进行编程,但我检查了代码,这种方法确实有意义 :)

    【讨论】:

    • 这将重定向输出,而不是复制它。您将获得控制台输出或文件输出。请参阅链接的问题以了解如何镜像输出。
    • 那么在程序末尾带有 using 块的 StringBuilder 怎么样?
    • +我搜索了谷歌,但都是关于如何登录控制台而不是如何登录控制台:) 所以正确的问题是关键字是什么?
    【解决方案6】:

    使用log4j。

    1. 转到log4j website并下载dll。
    2. 在您的项目中引用 dll。
    3. 将此添加到您的 app.config 顶部
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="log-file.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] -%message%newline" />
        </layout>
    </appender>
    
    
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] -%message%newline" />
        </layout>
    </appender>
    
    1. 将此作为您要登录的任何类的成员:

      私有静态只读ILog log = LogManager.GetLogger(typeof(Foo));

    2. 像这样写一行来记录:

    log.Debug("Hello world!");

    【讨论】:

    • 感谢您的宝贵时间。我补偿了一个否定但不能接受它作为我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多