Logfile



  • Hi,

    kann mir jmd von euch sagen wie man am besten ein logfile schreibt? Ich hätte jetzt spontan die CFileClass dafür verwendet - gibt es noch bessere Alternativen?

    Wie stellt man allgemein sicher, dass das Textfile nicht "unendlich" groß wird im Laufe der Zeit aufgrund der ganzen Logeinträge? z.B. wenn die Software über mehrere Jahre, tag und nach läuft und ständig Einträge etc. gelogt werden sollen.

    Gibt es da Mechanismen die man hier anwendet? Erreicht das File die Größe X, dann lösche es und fang wieder mit einem leeren File an???

    Gruß
    Olaf



  • täglisch ein neues File anfangen und Files die älter als zum Beispiel eine Woche sind Löschen.

    na ja und tann vielleicht das ganze mit CFile in einem eigenen Thread laufen lassen und die einträge aus dem Programm über eine Threadnachricht zu dem Thread Senden der dann den Text in das File Schreibt.

    Verschiedene Tracelevel einbauen, also von jeder Nachricht mitschreiben und zum Beispiel einen Fehler zu finden bis zum kleinsten Level wo nur noch Fehler geschrieben werden.

    Sollte erstmal genügend anstoß dazu sein, vielleicht hat noch jemand anders ne tolle Idee


  • Mod

    Wir arbeiten mit rotierenden Log-Dateien. Je nach Einstellung werden die Log-Dateien täglich rotiert und umbenannt. Der älteste LOG wird gelöscht.

    Ansonsten:
    http://www.codeproject.com/KB/trace/



  • CTecS schrieb:

    täglisch ein neues File anfangen und Files die älter als zum Beispiel eine Woche sind Löschen.

    Wenn man täglich ein Logfile erstellt - der Name beinhaltet dann das Datum in irgendeiner Weise - wie findet man dann heraus, ob ein File schon älter ist als eine Woche?

    <open all *txt files in dem Logfile-Ordner und überprüfe das Datum>?


  • Mod

    Olaf Schwendsin schrieb:

    Weise - wie findet man dann heraus, ob ein File schon älter ist als eine Woche?
    <open all *txt files in dem Logfile-Ordner und überprüfe das Datum>?

    Entweder gibt es einfach nur eine mo,di,mi,do,fr,sa,so Datei. Dann muss ich gar nichts prüfen.
    Oder das Datum ist Bestandteil des Namens. Dann kann ich mit FindFirstFile die entsprechenden Dateien alle suchen, den Datumsbestandteil im Namen prüfen und die mit einem alten Datum löschen...



  • Danke für diesen Tipp. Es läuft bereits; allerdings hab ich noch eine Frage. Welche Methode sollte ich zum Löschen von einem Logfile verwenden.

    a) CFile del; del.Remove(Pfath);
    b) DeleteFile(Pfath);

    Das Datum ermittle ich jetzt über die Funktionen GetCreationTime() (Logfile-Erstellung) und anschließend vergleiche ich diese mit der aktuellen Systemtime und verwende die Funktion CompareFileTime().

    Olaf



  • Olaf Schwendsin schrieb:

    Danke für diesen Tipp. Es läuft bereits; allerdings hab ich noch eine Frage. Welche Methode sollte ich zum Löschen von einem Logfile verwenden.

    a) CFile del; del.Remove(Pfath);
    b) DeleteFile(Pfath);

    Das Datum ermittle ich jetzt über die Funktionen GetCreationTime() (Logfile-Erstellung) und anschließend vergleiche ich diese mit der aktuellen Systemtime und verwende die Funktion CompareFileTime().

    Olaf

    ist eigentlich gleich welche der beiden Methoden du benutzt, da du entweder DeleteFile(Pfad) oder auch CFile::Remove(Pfad) aufrufen kannst weil CFile::Remove ja static ist



  • Ich hab mir für solche Fälle eine Logging-DLL geschrieben, die die Einträge in einer SQLite Datenbank speichert. Das ganze hat mehrere Vorteile:

    - Jeder Eintrag hat ein Verweis auf die Sourcedatei & -Zeile, so kann die Ursache schnell gefunden werden.
    - Zusätzlich hat jeder Eintrag noch verschiedene Attribute wie Warning, Error, Ursache der Nachricht, z.B. Database, Network, etc...
    - Datum zur Zeit des Loggens.

    Dadurch kann ich einfach alle Einträge bis zu einem gewissen Datum löschen oder auch nur die letzten 100 Einträge behalten.

    Ist allerdings sicherlich mehr Aufwand als nur ein einfaches Text-Logfile. Nachteilig ist, das man sich die Daten nicht mehr einfach mit dem Notepad anzeigen lassen kann. Dafür hab ich eine einfache Anzeige in die DLL eingebaut. Für größere Analysen muss man sich die Datei vom Kunden kopieren und dann in nem SQLite Browser anschauen.

    Vielleicht so als kleine Anregung 🙂


Log in to reply