c#记录控制台中正在写入的所有内容

本文关键字:控制台 记录 | 更新日期: 2023-09-27 18:25:17

我有一个用c#编码的服务器,我想知道。。有没有一种方法可以记录控制台中弹出的所有内容,而不必去写console.WriteLine的每一行,然后添加StreamWriter或其他什么?

我要用这个:

 *.exe > *.log

但我希望在登录时能够看到控制台。。有什么想法吗?

c#记录控制台中正在写入的所有内容

您可以使用Trace同时写入控制台和文件:

Trace.WriteLine("Hello");

要设置控制台和文件输出,请在应用程序启动时使用以下内容:

Trace.AutoFlush = true;
Trace.Listeners.Clear();
Trace.Listeners.Add(new ConsoleTraceListener());
Trace.Listeners.Add(new TextWriterTraceListener("log.txt"));

同样可以从配置文件中进行配置

<system.diagnostics>
  <trace autoflush="true">
    <listeners>
      <clear/>
      <add name="console" type="System.Diagnostics.ConsoleTraceListener"/>
      <add name="file" type="System.Diagnostics.TextWriterTraceListener"
           initializeData="log2.txt"/>
    </listeners>
  </trace>
</system.diagnostics>

但是考虑使用一些日志框架行NLog(可从NuGet获得)。我认为这就是您所需要的——您可以同时写入控制台和文件,以及许多其他目标,您可以通过更改配置文件来添加和删除这些目标:

<targets>
  <target xsi:type="Console" name="console" layout="${time} ${message}"/>
  <target xsi:type="File" name="file" fileName="${basedir}/logs/log.txt"/>
</targets>
<rules>   
  <logger name="*" minlevel="Trace" writeTo="file,console" />    
</rules>

用法:

Logger logger = LogManager.GetCurrentClassLogger();
// after you obtained logger
logger.Info("Hello");// message goes to all targets

这样做的可行性和易用性取决于程序的启动方式。

如果您的程序是从命令行、批处理脚本或快捷方式启动的,您可以简单地重定向输出。类似这样的东西:

myprogram.exe > mylogfile.txt

如果你正在编写一个启动另一个程序的程序,你可以通过重定向代码中的输出来完成同样的事情。请参阅ProcessStartInfo.RedirectStandardOutput

我认为您想要的是使用类似tee的东西。它的设计目的是让您看到控制台输出,并将相同的输出重定向到一个文件。

它不随Windows提供,但它和其他有用的工具可在http://gnuwin32.sourceforge.net.当然胜过重写代码。:-)

运行cmd,并像以下一样执行您的exe

c: ''Users''you>c:''Bin''yourexecutable.exe>c:''Log''yourexecutoble.Log

编写一个方法,当您调用时,它同时调用Console.WriteLine()和您用来记录的任何方法,然后调用该方法而不是Console.WriteLine()

public class Logger
{
public static void WriteLine(string s)
{
  Console.WriteLine(s);
  myLogger.WriteLine(s);
{
}