Переопределение System.Diagnostics.Trace.WriteLine для входа в файл - PullRequest
12 голосов
/ 16 мая 2009

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

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

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

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

Ответы [ 2 ]

27 голосов
/ 16 мая 2009

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

Однако, если вы действительно хотите использовать Trace, вы можете перенастроить TraceListener s, используемые с файлом 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).

3 голосов
/ 16 мая 2009

Существует 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

...