Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Sonstiges (https://www.delphipraxis.net/45-library-sonstiges/)
-   -   LOG-Datei erstellen (https://www.delphipraxis.net/13455-log-datei-erstellen.html)

Uncle Cracker 18. Dez 2003 19:18


LOG-Datei erstellen
 
Manche Leute wollen wissen, wie man eine LOG-Datei erstellt, eigentlich ganz simple, da es nur eine einfach Textdatei ist, doch für welche die noch nicht ganz wissen wie sie das anstellen sollen, hier mal ein Beispiel:

Delphi-Quellcode:
var f: TextFile; //Globale Variable

procedure LogOpen(Datei: string); //Procedure zum Öffnen der LOG-Datei
begin
  AssignFile(f, Datei); //Ordnet der Variable f Namen zu
  Rewrite(f); //Erstellt die Datei
  WriteLn(f, DateToStr(Date) + ' ' + TimeToStr(Time) + ': Geöffnet'); //Schreibt in die Datei
end;

Procedure LogClose; //Procedur zum beenden der LOG-Datei
begin
  WriteLn(f, DateToStr(Date) + ' ' + TimeToStr(Time) + ': Beendet');  //Schreibt in die Datei
  CloseFile(f); //Beendet Zuordnung der Variable f
end;

procedure LogAdd(Text:String;Zeilenende:Boolean);
begin
  Text := DateToStr(Date) + ' ' + TimeToStr(Time) + ': ' + Text; //Schreibt Text in die LOG-Datei
  if Zeilenende then WriteLn(f, Text) else Write(f, Text); //Schreibt in die LOG-Datei mit Zeilenende oder nicht
end;

Hinweis: Der Text wird erst nach LogClose in die Datei geschrieben, zwischendurch nicht.
Außerdem kann man erst in die Datei schreiben wenn man mit LogOpen begonnen hat.


PS: Bitte schreibt bei Problemen oder Verbesserungsvorschlägen oder wenn die Beschriftung falsch ist :roll:

[edit=Matze]Code formatiert. Mfg, Matze[/edit]

Luckie 18. Dez 2003 19:31

Re: LOG-Datei erstellen
 
Warum drei Routinen und eine globale Variable?

Delphi-Quellcode:
const
 LOGFILE = 'LoagFile.log';

function WriteLog(LogString: String): Integer;
var
  f: TextFile;
begin
{$IOChecks OFF}
  AssignFile(f, ExtractFilePath(ParamStr(0))+LOGFILE);
  if FileExists(ExtractFilePath(ParamStr(0))+LOGFILE) then
    Append(f)
  else
    Rewrite(f);
  Writeln(f, LogString);
  CloseFile(f);
  result := GetLastError();
{$IOCHECKS ON}
end;
Eine Routine, keine globale Variable und es steht sofort im Logfile. Stürzt dein Programm ab, dürfte im Logfile nicht all zu viel drin stehen. Nun ja eventuell schon, nur wird die datei nicht ordnungsgemäß geschlossen.

choose 19. Dez 2003 10:00

Re: LOG-Datei erstellen
 
IMHO gibt es bei einem Logging-System wesentlich mehr zu beachten, als das Anlegen einer Datei:
Neben unterschiedlichen Ausgabeströmen (zB OBS, Remote) und -Strategien (zB Textfile nach >100k neu erzeugen) und der Möglichkeit, die "Geschwätzigkeit" zb mithilfe von Qualifizierung der Einträge (Debug, Info, Warnung, Error, Fatal,...) oder innerhalb von Hierarchien (App.Logic, App.DBMS, App.GUI.Input, ...) zu regulieren sowie das optionale Sammeln gewisser Rahmendaten (zB Zeit, Uptime, Process-/Thread-Id/-Name), sollte so ein System vollständig zur Lauftzeit konfigurierbar sein, um vor Ort intensivere Analysen durchführen zu können oder bei der Entwicklung detaillierte Informationen zu erhalten, ohne dass die Performance der Release-Infomation darunter leidet.
Die Kapselung der tatsächlichen Darstellung (HTML, PlainText, ...) bzw des Renderings innerhalb des Loggins-Konzept, um zB ein Objekt direkt übergeben zu können anstatt einen HTML-String aus den Eigenschaften zu basteln, runden die Lösung dann zusammen mit einfacher Erweiterbarkeit und diversen Filtermöglichkeiten ab...

Wem das ganze zu utopisch klingt, sollte einmal einen Blick auf log4j werfen. Zwar ist das eine Lösung für Java, die Ideen lassen sich aber 1:1 in Delphi umsetzen. Eine entsprechende Implementierung in Delphi ist bereits in der Meche und vor ein paar Jahren hat Keith Wood (einer der Beteiligten dieses Projekts) in der CodeCentral ebenfalls eine Implementierung vorgestellt: Bei Google suchencodecentral log4d.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz