2009-05-15 8 views
4

Ich habe einen bestehenden .net Dienst, und ich möchte es konfigurieren, um Nachrichten in eine Protokolldatei zu schreiben. Ich habe in den folgenden in der Service-Konfiguration:Protokolldateien Rotation mit .net Listener

<system.diagnostics> 
    <sources> 
    <source name="My.Service" switchValue="All"> 
     <listeners> 
     <add name="text" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\log.txt" traceOutputOptions="Timestamp"/> 
     </listeners> 
    </source> 
    </sources> 
</system.diagnostics> 

Das Problem ist, dass die Protokolldatei schnell sehr groß wird, so dass ich mich gefragt, ob es möglich ist, eine Art von Log-Rotation zu konfigurieren.
Da der Prozess die Datei zum Schreiben sperrt, ist es nicht möglich, sie manuell zu rotieren, z. B. mit einem Skript, das die Datei regelmäßig umbenennt, zumindest ohne den Dienst anzuhalten und neu zu starten.

Danke für jeden Vorschlag.

Antwort

8

Es gibt die FileLogTraceListener, die ich denke, würde den Trick tun. Sie können es zu einem täglichen oder wöchentlichen Intervall konfigurieren.

Wenn es nicht genug ist, dann müssen Sie Ihren eigenen Tracelistener schreiben, erben Sie einfach von TraceListener und überschreiben Sie die Schreibmethoden.

+2

Danke, das ist genau das, was ich gesucht hat, aber ich hatte es komplett verpasst! Ich frage mich, warum es in der Microsoft.VisualBasic-Assembly anstelle von System.Diagnostics definiert ist, jedenfalls würde ich denken, dass rotierende Protokolle ein ziemlich häufiges Bedürfnis ist ... –

0

Könnten Sie haben die Log-Rotation in den Dateinamen aufgebaut, so dass:

"c: \ log.txt"

wird:

"c: \ logDDMMYYYY.txt"

Auf diese Weise wird das Protokoll am Ende des Tages automatisch auf eine neue Datei übertragen.

0

Vielleicht können Sie sich log4net eine kostenlose und einfach zu bedienende Logging-Bibliothek für. NET. Diese Bibliothek enthält bereits ein rotierendes Protokoll.

Andernfalls haben Sie Ihren Dienst, um die Datei automatisch zu entsperren und/oder zu einer neuen Datei einzuloggen.

+0

Sieht vielversprechend aus, aber können diese Logger-Klassen als Trace-Listener konfiguriert werden? –

+0

Es sollte ... eine TraceAppender-Klasse enthalten sein. Der gute Punkt, Sie können immer die Bibliothek erweitern und schreiben Sie Ihre eigenen Appender (= Wo und wie Protokoll geschrieben wird) – Scoregraphic

+0

oh..ich habe vergessen zu erwähnen, dass die Bibliothek ist vollständig konfigurierbar durch eine separate Konfigurationsdatei – Scoregraphic

Verwandte Themen