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

274
04 мая 2017, 11:31

У меня вызывается метод.

public void doSomethingElse()
{
    Debug.WriteLine(color);
}

Сам метод выводит на консоль строку. Как мне после вывода строки на консоль, выведенную информацию записать в файл. Изначально переменную не могу записать в файл так как выполняю юнит тесты.

Answer 1

У механизмов отладочного вывода (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:

<configuration>  
  <system.diagnostics>  
    <trace autoflush="false" indentsize="4">  
      <listeners>  
        <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextWriterOutput.log" />  
        <remove name="Default" />  
      </listeners>  
    </trace>  
  </system.diagnostics>  
</configuration>  
Trace.TraceInformation("Test message.");  
// You must close or flush the trace to empty the output buffer.  
Trace.Flush();  
READ ALSO
Как узнать, какой return сработал в unit test

Как узнать, какой return сработал в unit test

Есть метод, который добавляет нового пользователяЕсли пользователь добавлен - перенаправляет на index, иначе возвращает вьюшку с моделью

253
Unity - как написать &ldquo;после того как анимация закончится&rdquo;?

Unity - как написать “после того как анимация закончится”?

Unity, C#Есть молдель с animator, в котором уже настроены стейты-анимации и параметры для переходов между ними

565
Символ в название переменной

Символ в название переменной

Хочу прочитать JSON файл с использованием View модели (класса с названием всех переменных), но возникла загвоздкаНекоторые имена в файле имеют...

204
Cтроки подключения в App.config и Web.config

Cтроки подключения в App.config и Web.config

Представим ситуацию: В Visual Studio есть решение, которое состоит из 3 проектовВ каждом из проектов в файле app

502