StreamWriter / Logdatei - max. Länge begrenzen

21/01/2008 - 13:57 von Olaf Rabbachin | Report spam
Hallo *,

ich habe eine kleine Log-Klasse, die im Verlauf der Laufzeit einer
Anwendung Dinge protokolliert. Ist die Log-Datei beim Anwendungsstart
bereits vorhanden, wird an das existentes (alte) Log angehangen, ansonsten
wird die Datei erzeugt.
Ich möchte nun der entstehenden Datei eine max. Lànge vorgeben können, so
dass das Log nicht uferlos wàchst und die àltesten Eintràge einfach
abgeschnitten werden.

Ich finde allerdings keine "vernünftige" Möglichkeit, das anzustellen, ohne
dass ich jedes Mal quasi ein .Flush() auf den Writer ausführe, dann per
StreamReader lese, vom Anfang abschneide und zurückschreibe.
Das erscheint im übrigen auch wenig performant, vor allem, wenn das
Handling der Log-Eintràge zeitkritisch ist.

Gibt's eine sinnvolle Möglichkeit, das zu bewerkstelligen?

Gruß & TIA,
Olaf
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
21/01/2008 - 14:38 | Warnen spam
"Olaf Rabbachin" schrieb:
ich habe eine kleine Log-Klasse, die im Verlauf der Laufzeit einer
Anwendung Dinge protokolliert. Ist die Log-Datei beim Anwendungsstart
bereits vorhanden, wird an das existentes (alte) Log angehangen, ansonsten
wird die Datei erzeugt.
Ich möchte nun der entstehenden Datei eine max. Lànge vorgeben können, so
dass das Log nicht uferlos wàchst und die àltesten Eintràge einfach
abgeschnitten werden.

Ich finde allerdings keine "vernünftige" Möglichkeit, das anzustellen,
ohne
dass ich jedes Mal quasi ein .Flush() auf den Writer ausführe, dann per
StreamReader lese, vom Anfang abschneide und zurückschreibe.
Das erscheint im übrigen auch wenig performant, vor allem, wenn das
Handling der Log-Eintràge zeitkritisch ist.



Momentan gibt es keine viel bessere Lösung als die von Dir genannte. Du
könntest allenfalls ab einer bestimmten Dateigröße beginnen, die Daten in
einer zweiten Protokolldatei zu protokollieren. Das hàtte den Vorteil, daß
auch alte Protokolleintràge nicht verloren gehen und selektiv gelöscht
werden können.

Künftig könnte zu diesem Zweck CLFS interessant werden:

Common Log File System (Windows)
<URL:http://msdn2.microsoft.com/en-us/library/bb986747(VS.85).aspx>

MSDN Webcast: Using the Common Log File System (CLFS) in Your Applications
(Level 300)
<URL:http://msevents.microsoft.com/cui/W...mp;EventID32293797&CountryCode=US>

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen