2012-02-07 16 views
5

Używam System.Diagnostics.TraceSource do rejestrowania i jeden z moich odbiorców to TextWriterTraceListener. W kalka podkładu here ustawia to w następujący sposób:Jak zatrzymać dołączanie obiektu TextWriterTraceListener przy użyciu pliku app.config?

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

Problemem jest to, że będzie to zawsze dołączyć do Output.txt. Jak zmienić to na nadpisanie w pliku konfiguracyjnym?

Programowo słuchacz chcę to:

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

Odpowiedz

2

Najprostszym rozwiązaniem jest stworzenie własnego.

Proponuję odziedziczyć po TextWriterTraceListener iw swoim konstruktorze ustawić bazę Writer na proponowaną: new StreamWriter("output.txt", false).

Niektóre przykładowy kod:

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

Pozwala to przyjąć parametr initializeData z pliku konfiguracyjnego, aby określić nazwę pliku, lub podać jeden czy stworzony w kodzie.

+0

Podoba mi się pomysł, ale podczas określania typu w App.config 'type = MyNamespace.MyTextWriterTraceListener' program ulega awarii. –

+0

Interesujące. Niedawno stworzyłem podobnego słuchacza, który nie miał problemów. Jedyny bit, który musiałem dodać do pliku app.config to 'type =" MyNamespace.MyTextWriterTraceListener, AssemblyNameContainingListener "'. Upewnij się także, że jest kopiowany zawierający go zestaw, miałem test jednostki, który odwoływał się do niego w pliku app.config, ale nie w kodzie, więc program Visual Studio był na tyle pomocny, aby nie kopiować go lokalnie. –

+0

Dzięki, opuszczałem nazwę zespołu. –

1

wiem, że to nie bezpośrednio odpowiedzieć na to pytanie, ale zamiast używać NLog. Robi więcej rzeczy niż gotowa diagnostyka w zakresie opcji rejestrowania i jest naprawdę łatwa w użyciu.

+3

-1 nie odpowiada w ogóle na pytanie. OP nie pytał o alternatywne rozwiązania w zakresie rejestrowania, ale raczej jak skonfigurować wybrane. –

+1

@JonPeterson Nie zgadzam się. Istnieje uzasadniona szansa, że ​​ta odpowiedź będzie pomocna komuś, gdzieś. – Holf

0

Jeszcze prostsze, wystarczy powiedzieć TestWriterTraceListener aby nie dołączyć plik:

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

Wybierając false Plik dziennika jest nadpisywany każdorazowo zainicjować TextWriterTraceListener.

+0

Dziękuję, ale szukałem rozwiązania, które umożliwiałoby specyfikację pisarza w config. Twoje rozwiązanie jest na samym dole pytania jako zachowanie, które chciałbym powtórzyć :) –

Powiązane problemy