Страницы

Поиск по вопросам

среда, 14 ноября 2018 г.

Записать в файл то, что процедура ввыводит на консоль

У меня вызывается метод.
public void doSomethingElse() { Debug.WriteLine(color); }
Сам метод выводит на консоль строку. Как мне после вывода строки на консоль, выведенную информацию записать в файл. Изначально переменную не могу записать в файл так как выполняю юнит тесты.


Ответ

У механизмов отладочного вывода (Debug.WriteLine) и трассировки (Trace.WriteLine) есть стандартные способы перенаправления - Trace Listeners.
По умолчанию вывод Debug.WriteLine уходит вникуда, т.к. ни одного Trace Listener-а для него не задано. При отладке сам отладчик (студия) добавляет Trace Listener, который перенаправляет вывод в окно отладчика (Output), а вовсе не на консоль.
Так что вам не надо перенаправлять вывод на консоль в файл. Вам нужно просто добавить стандартный TextWriterTraceListener в Debug.Listeners и вы получите копию отладочного вывода в файле. Вот минимальный код:
using System.Diagnostics;
namespace ConsoleApp3 { class Program { static void Main(string[] args) { // в инициализации тестов, один раз Debug.Listeners.Add(new TextWriterTraceListener("log.txt"));
Debug.WriteLine("test");
// после прогона тестов // чтобы записать буфер на диск и не потерять хвост лога Debug.Flush(); } } }
При трассировке (использовании Trace.WriteLine) listener-ы можно задавать прямо в конфиге, это достаточно подробно расписано в howto в MSDN


Trace.TraceInformation("Test message."); // You must close or flush the trace to empty the output buffer. Trace.Flush();

Комментариев нет:

Отправить комментарий