Я запускаю код на микроконтроллере с .NET Micro Framework, и я хочу, чтобы мой вывод отладки записывался в текстовый файл. Как это работает?
Запись вывода отладки С# в файл .txt
Ответ 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();
Взято из здесь.