![]() |
Re: Log-Datei realisieren
Hallo zusammen,
(ich hoffe, dass meine nachfolgende Frage zu diesem Thread paßt und kein neuer Thread dafür erstellt werden braucht) Wenn man nun die Größe der Protokolldatei festlegen will/muss, wie sollte man da am besten vorgehen? Die Protokolldatei jedes mal in z.B. eine TStringList laden und wenn eine vorgegebene Größe erreicht ist, dann einfach einen festen "Block" (z.B. die ersten 20000 Zeilen) löschen? Dann hätte man immer noch eine gewisse Historie. (das wäre dann quasi eine selbst reorganisierende Datei) Eine andere Möglichlkeit wäre noch, wenn die Protokolldatei die vorgegebene Größe erreicht hat, dann diese Datei einfach umzubenennen und die Protokollierung in eine neue und damit "leere" Protokolldatei fortzusetzen. |
Re: Log-Datei realisieren
Hallo Jürgen,
ich würde an Hand von Erfahrungswerten ein Zeitintervall bestimmen, nach dessen Ablauf automatisch auf eine neue Protokolldatei umgestellt wird. Grüße vom marabu |
Re: Log-Datei realisieren
Hallo marabu,
so einfach?! :-D :wall: Ehrlich gesagt, an diese Variante hatte ich noch gar nicht gedacht. Ich werde das bei mir jetzt auch genauso ändern, dass ein eigenen Ordner (Protokollierung) innerhalb der Anwendung angelegt wird. Dann wird für jeden Monat eine Protokolldatei geschrieben. Und dann noch einen "Protokoll-Viewer" basteln. Fertig ist's. Danke und ein schönes Wochenende! |
Re: Log-Datei realisieren
also in meiner PHP-Version ist es so gelöst, das bei Erreichen einer maximalen Dateigröße die Datei bis zum Minimum(Dateigröße) alte Einträge entfernt werden.
(hab mir das so einfallen lassen, da in dem Projekt seltener Einträge vorgenommen werden und eh nur die Einträge der näheren Vergangenheit interesant sind) und jedesmal die Datei komplett einzulesen wäre auch nicht grad optimal. (verbraucht nur unnötig Resourcen und Zeit) |
Re: Log-Datei realisieren
Trotz der Einwände bleibe ich hier bei der Ausgangsfrage :
Zitat:
|
Re: Log-Datei realisieren
Zitat:
Also frage ich nochmal: was bewirkt die Zeile
Delphi-Quellcode:
genau? Was ist anders, wenn ich die Zeile einfach weglasse? Mein Programm verhält sich wie gesagt genauso...
FileMode := fmOpenReadWrite or fmShareExclusive;
|
Re: Log-Datei realisieren
Zitat:
|
Re: Log-Datei realisieren
per Default ist MileMode nur auf fmOpenReadWrite gesetzt (in der Unit System)
also werden Dateien damit nicht exlusiv geöffnet. Zitat:
Zitat:
Zitat:
versuch doch einfach mal eine Datei mehrmals zu öffnen. Zitat:
Zitat:
Zitat:
aber de Witz Dabei, ich hab es eben selbst mal ausprobiert und war "geschockt" im Delphi 7 hier wird die Datei bei Schreibzugriff (Rewrite oder Append) immer im exklusiven Modus geöffnet, selbst wenn der nicht angegeben ist. Und besonsters geschockt war ich, als ich selber angegeben hab, daß mit Sharing-Rechten (nicht Exklusiv) geöffnet werden sollte :shock: Ich würde das jetzt mal ganz einfach als Delphifehler auslegen und dazu raten dieses lieber nicht auszunutzen/vorauszusetzten (wer weiß ob/wann das mal repariert wird/wurde) eigentlich müßte das Erste ohne Exception durchlaufen und das Zweite wie gewollt bei Append(F2); eine Exception auslösen.
Delphi-Quellcode:
Var F, F2: TextFile;
Begin // testdatei erstellen AssignFile(F, 'test.txt'); Rewrite(F); CloseFile(F); //FileMode := fmOpenReadWrite or fmShareDenyNone; // mit sharing-rechten AssignFile(F, 'test.txt'); Append(F); AssignFile(F2, 'test.txt'); Append(F2); CloseFile(F2); CloseFile(F); FileMode := fmOpenReadWrite or fmShareExclusive; // exklusiv AssignFile(F, 'test.txt'); Append(F); AssignFile(F2, 'test.txt'); Append(F2); CloseFile(F2); CloseFile(F); End; |
Re: Log-Datei realisieren
Zitat:
Wie dem auch sei: danke himitsu, dass du der Sache auch mal auf den grund gegangen bist! So stellt sich das alles für mich in einem ganz neuen Licht dar! Wenn man wirklich davon ausgeht, dass es sich bei diesem Verhalten um einen Delphi-Fehler handelt, dann ergibt das explizite Umstellen (und Rückstellen!!!) des FileMode durchaus einen Sinn, das sehe ich absolut genau so! Seht ihr, man kann mich durchaus überzeugen (so viel zum Thema "Jungprogrammierer" und "Erkenntnisse der IT"...). |
Re: Log-Datei realisieren
Zitat:
FileMode ist leider eine Progamminterne Variable und wird in allen nachfolgenden Reset/Rewrite/Append-Aufrufen werwendet. Wenn also irgendwo anders im Programm wieder eine Datei geöffnet wird, dann wäre es besser wenn man da den alten Wert wiederherstellt, da es da sonst zu problemen kömmen kann (wenn dort ein anderer oder der Standardwert benötigt wird) nja, das Schlimme daran ist eigentlich daß man aufgrund dieses Fehlers keine Dateien mehrfach öffnen kann, selbst wenn man wöllte :wall: (na ja, zum Glück hab ich mich da komplett auf die WinAPI umgestellt und dort läuft alles wie gewünscht ^^) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz