Как вы мешаете TextWriterTraceListener от добавления с помощью app.config? - PullRequest
5 голосов
/ 07 февраля 2012

Я использую System.Diagnostics.TraceSource для ведения журнала, и один из моих слушателей - TextWriterTraceListener. В трассировочном учебнике здесь он устанавливает это следующим образом:

<listeners>
  <add initializeData="output.txt" 
       type="System.Diagnostics.TextWriterTraceListener"
       name="myLocalListener" />
</listeners>

Проблема в том, что это всегда будет добавляться к output.txt. Как вы можете изменить это на перезапись в файле конфигурации?

Программно слушатель, которого я хочу, это:

new TextWriterTraceListener(new StreamWriter("output.txt", false));

Ответы [ 3 ]

2 голосов
/ 07 марта 2014

Самое простое решение - создать свой собственный.

Я предлагаю вам наследовать от TextWriterTraceListener и в своем конструкторе установить для базы Writer то, что вы предложили: new StreamWriter("output.txt", false).

Пример кода:

public class MyTextWriterTraceListener : TextWriterTraceListener
{
    public MyTextWriterTraceListener(string logFileName)
        : base(logFileName)
    {
        base.Writer = new StreamWriter(logFileName, false);
    }
}

Это позволяет вам взять параметр initializeData из файла конфигурации, чтобы указать имя файла, или указать его, если он создан в коде.

1 голос
/ 07 февраля 2012

Я знаю, что это не дает прямого ответа на ваш вопрос, но вместо этого используйте NLog .Он делает больше вещей, чем готовая диагностика с точки зрения параметров ведения журнала, и он действительно прост в использовании.

0 голосов
/ 23 октября 2014

Еще проще, просто скажите TestWriterTraceListener, чтобы он не добавлял файл:

TextWriterTraceListener twtl = new TextWriterTraceListener(new StreamWriter(@"<path to my logfile>", false));

При выборе false файл журнала перезаписывается при каждой инициализации TextWriterTraceListener.

...