将C#调试输出写入.txt文件

755*_*755 17 c# microcontroller .net-micro-framework

我在使用.NET Micro Framework的微控制器上运行代码,我希望我的调试输出写入文本文件.这是如何运作的?

Ekk*_*Ekk 24

使用跟踪.它旨在满足您的需求.

using System;
using System.Diagnostics;

class Test
{
    static void Main()
    {
       Trace.Listeners.Add(new TextWriterTraceListener("yourlog.log"));
       Trace.AutoFlush = true;
       Trace.Indent();
       Trace.WriteLine("Entering Main");
       Console.WriteLine("Hello World.");
       Trace.WriteLine("Exiting Main");
       Trace.Unindent();
       Trace.Flush();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您只想跟踪到Console,那么ConsoleTraceListener似乎是一个更清晰,更直接的解决方案.但他要求写入一个档案. (2认同)

Uco*_*dia 13

使用开箱即用跟踪的最灵活的解决方案是创建一个定义跟踪侦听器的应用程序配置文件.

<configuration>
  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="textListener" 
             type="System.Diagnostics.TextWriterTraceListener" 
             initializeData="trace.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

然后,在您的应用程序中,只要您想记录某些内容,只需执行以下操作:

Trace.WriteLine("Hello, this is a trace");
Run Code Online (Sandbox Code Playgroud)

但TraceListener类的强大之处在于其粒度.您可以在错误,信息和警告级别之间进行选择,并为您需要跟踪的任何级别定义不同的日志文件.使用配置文件还可以更轻松地在应用程序中禁用跟踪,因为您无需重新编译应用程序.

有关跟踪系统的更多信息,请查看此MSDN文章.


Tod*_*odd 10

Ekk对于Trace是一个更好的设计是正确的,但是它没有回答这个问题,在没有直接解决方案的情况下会很好.OP或某人可能继承了一个完全使用Debug的代码库,当时可能不需要Trace.

我找到了这个解决方案[ http://bytes.com/topic/c-sharp/answers/273066-redirect-output-debug-writeline]:

TextWriterTraceListener[] listeners = new TextWriterTraceListener[] {
new TextWriterTraceListener("C:\\debug.txt"),
new TextWriterTraceListener(Console.Out)
};

Debug.Listeners.AddRange(listeners);

Debug.WriteLine("Some Value", "Some Category");
Debug.WriteLine("Some Other Value");
Run Code Online (Sandbox Code Playgroud)


Aam*_*mir 0

你必须做这样的事情:

// Set up listener
string filename = @"C:\listener.txt";
FileStream traceLog = new FileStream(filename, FileMode.OpenOrCreate);
TextWriterTraceListener listener = new TextWriterTraceListener(traceLog);

// Output to listener
listener.WriteLine("Trace message here");

// Flush any open output before termination.
// Maybe in an override of Form.OnClosed.
listener.Flush();
Run Code Online (Sandbox Code Playgroud)

取自这里

另一个相关问题