Переопределение System.Diagnostics.Trace.WriteLine для входа в файл

Это может быть скорее вопрос концепции ООП, но вот что я хотел бы сделать.

У меня есть приложение, которое выводит отладочную информацию с помощью System.Diagnostics.Trace.WriteLine, поэтому ее можно просмотреть с помощью DebugView.

Я хотел бы переопределить/расширить (не уверенный в правильной терминологии) этот метод для записи текста в файл вместо него или, возможно, в дополнение к выходу Trace. Это позволило бы мне написать новый метод WriteLine для моего приложения, и я мог бы оставить все остальные мои заявления System.Diagnostics.Trace.WriteLine неизменными во всем остальном приложении.

Итак, как я могу изменить поведение этого метода в приложении VB.Net?

Ответы

Ответ 1

Вы абсолютно уверены, что используете Trace? Если нет, я бы использовал более полнофункциональную систему ведения журнала, такую ​​как Log4Net.

Однако, если вы действительно хотите использовать Trace, вы можете перенастроить TraceListener, используемый с файлом app.config. TraceListener Документы MSDN дают пример примерно так:

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="fileLogger" 
             type="System.Diagnostics.TextWriterTraceListener" 
             initializeData="LogFile.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

TextWriterTraceListener будет записывать журналы в данный файл. (Есть и другие варианты.)

В качестве альтернативы вы можете сделать это программно:

Trace.Listeners.Add(new TextWriterTraceListener("foo.log"));

Обратите внимание, что вам может потребоваться явно очистить трассировки до выхода вашего приложения, либо с помощью:

Trace.Flush();

или более сложный:

foreach (TraceListener listener in Trace.Listeners)
{
    listener.Flush();
}

(я упоминаю только об этом, потому что мне приходилось проверять это!)

РЕДАКТИРОВАТЬ: Как отмечено в комментариях, если вы счастливы, что слушатель будет очищаться после каждой записи (что позволяет избежать флеша в конце, но может нанести вред производительности), вы можете установить Trace.AutoFlush в true (в том числе в XML - см. атрибут autoflush).

Ответ 2

Существует TextWriterTraceListener, который вы можете настроить для вывода журнала трассировки в файл. Конфигурационную информацию можно найти в MSDN здесь:

http://msdn.microsoft.com/en-us/library/system.diagnostics.textwritertracelistener(VS.80).aspx

Вы также можете распечатать журнал событий или множество других мест для списка встроенных трековых прослушивателей, которые вы можете посмотреть здесь:

http://msdn.microsoft.com/en-us/library/4y5y10s7(VS.80).aspx