Подтвердить что ты не робот

Запись вывода отладки С# в файл .txt

Я запускаю код на микроконтроллере с .NET Micro Framework, и я хочу, чтобы мой вывод отладки записывался в текстовый файл. Как это работает?

4b9b3361

Ответ 1

Используйте Trace. Он предназначен для того, чтобы делать то, что вам нужно.

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();
    }
}

Ответ 2

Наиболее гибким решением для использования готовой трассировки является создание файла конфигурации приложения, который будет определять прослушиватели трассировки.

<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>

Затем, в своем приложении, когда вы хотите что-то регистрировать, просто выполните:

Trace.WriteLine("Hello, this is a trace");

Но сила класса TraceListener заключается в его детализации. Вы можете выбирать между уровнями "Ошибка", "Информация" и "Предупреждение" и определять другой файл журнала для любого уровня, который необходимо отслеживать. Использование файлов конфигурации также упрощает отключение трассировки в приложении, потому что вам не нужно перекомпилировать ваше приложение.

Для получения дополнительной информации о системе отслеживания, проверьте статью MSDN.

Ответ 3

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");

Ответ 4

Вам нужно будет сделать что-то вроде этого:

// 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();

Взято из здесь.

Другой связанный с этим вопрос