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

时间:2013-07-26 21:11:15

标签: c# logging batch-file

我有一个用c#编码的服务器,我很想知道..有没有办法记录控制台中弹出的所有内容,而不必每行显示Console.WriteLine并添加StreamWriter等等? / p>

我打算用这个:

 *.exe > *.log

但我希望能够在记录时看到控制台..任何想法?

5 个答案:

答案 0 :(得分:4)

您可以使用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

答案 1 :(得分:1)

这种可行性和易用性取决于您的计划的推出方式。

如果您的程序是从命令行,批处理脚本或快捷方式启动的,则只需重定向输出即可。像这样:

myprogram.exe > mylogfile.txt

如果您正在编写一个启动另一个程序的程序,您可以通过在代码中重定向输出来完成相同的任务。见ProcessStartInfo.RedirectStandardOutput

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

运行cmd,并像这样执行你的exe

C:\用户\你&GT; c:\ Bin \ yourexecutable.exe&gt; C:\ LOG \ yourexecutable.Log

答案 4 :(得分:0)

我认为你要找的是tee之类的东西。它旨在让您查看控制台输出以及将相同的输出重定向到文件。

它没有附带Windows,但http://gnuwin32.sourceforge.net提供了它和其他有用的工具。当然要重写你的代码。 : - )