Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [Unit] Errorlog (https://www.delphipraxis.net/115347-%5Bunit%5D-errorlog.html)

Fussball-Robby 10. Jun 2008 19:46


[Unit] Errorlog
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mit der Unit ErrorLog ist es ganz einfach möglich, einen Errorlog für ein eigenes Programm zu erstellen, indem alle Fehler, die in der Anwendung auftreten, geloggt werden. Man muss die Unit unter uses eintragen und sich ganze 3 Befehle merken:
Delphi-Quellcode:
ErrorLog.Start(FileName);
Wie der Name schon sagt dient dieser Befehl zum starten des Protokollierens. Es wird eine Datei namens FileName angelegt, in der der Log gespeichert wird. Existiert die Datei bereits, wird die Liste zuvor noch geladen. Tritt kein Fehler auf, wird die Datei nicht erstellt.
Befehl No. 2 (ihr habt es euch bestimmt schon gedacht :wink: ):
Delphi-Quellcode:
ErrorLog.Stop;
Stoppt die Auflistung der Fehler bis wieder Start aufgerufen wird. Wird Start mit einem leeren String als Parameter aufgerufen, wird der FileName nicht erneuert, was nützlich zur Wiederaufnahme des Protokolls ist.
3. Befehl:
Delphi-Quellcode:
ErrorLog.Write(Flag, Msg);
Mit diesem Befehl ist es nun möglich, eigene Nachrichten zu loggen. Unter Flag trägt man quasi die Überschrift der Nachricht ein (z.B. "Info" oder "Warnung"). Msg ist dann die Nachricht, die geloggt wird.


Anwendung:
Delphi-Quellcode:
ErrorLog.Write('Info', 'Objekt XYZ wurde erstellt');
ergibt zum Beispiel:
Code:
[24.10.2008 / 17:01:42] [Info] Objekt XYZ wurde erstellt
Zusätzlich zu jeder Nachricht (eigene und automatisch geloggte) wird also das aktuelle Datum sowie die Uhrzeit gespeichert.

Vielleicht kann ja jemand die Unit gebrauchen.

Mfg

Larsi 10. Jun 2008 19:58

Re: [Unit] Errorlog
 
Hi,
klingt ganz gut. Was loggt die Lob Unit denn Alles?

Larsi 10. Jun 2008 19:59

Re: [Unit] Errorlog
 
Hat sich erledigt, habs verstanden :-D

Apollonius 10. Jun 2008 20:02

Re: [Unit] Errorlog
 
Hallo Robert,
ich finde es etwas unpassend, dass du bei jeder Exception die gesamte Datei neu schreibst. Mit den alten Pascal-Routinen geht das viel besser: Einfach mit Writeln anfügen und dann Flush aufrufen.

Eine interessante Ergänzung wäre es, wenn du noch die Möglichkeit bötest, über einen Hook auf HandleOnException und HandleAnyException alle Exceptions zu loggen, also auch die, die bereits durch einen inneren Try-Except-Block abgefangen werden.
Außerdem solltest du auch eine Methode veröffentlicht, die es dem Entwickler ermöglicht, eigene Nachrichten zu loggen.

Fussball-Robby 10. Jun 2008 20:14

Re: [Unit] Errorlog
 
Zitat:

Zitat von Apollonius
ich finde es etwas unpassend, dass du bei jeder Exception die gesamte Datei neu schreibst. Mit den alten Pascal-Routinen geht das viel besser: Einfach mit Writeln anfügen und dann Flush aufrufen.

Werde ich nachher noch machen.
Zitat:

Zitat von Apollonius
Eine interessante Ergänzung wäre es, wenn du noch die Möglichkeit bötest, über einen Hook auf HandleOnException und HandleAnyException alle Exceptions zu loggen, also auch die, die bereits durch einen inneren Try-Except-Block abgefangen werden.

Werde ich mir mal anschauen und, wenn ich mal die Zeit dazu habe, einbauen.
Zitat:

Zitat von Apollonius
Außerdem solltest du auch eine Methode veröffentlicht, die es dem Entwickler ermöglicht, eigene Nachrichten zu loggen.

Was für Nachrichten meinst du damit jetzt?

Auf jeden Fall schonmal Danke für die Anregungen

Apollonius 10. Jun 2008 20:17

Re: [Unit] Errorlog
 
Beliebige Nachrichten. Auch Erfolgsmeldungen kann man loggen. Falls der Entwickler dein Log erweitern will, sollte er dies tun dürfen.

ste_ett 10. Jun 2008 20:49

Re: [Unit] Errorlog
 
Zitat:

Zitat von Apollonius
Beliebige Nachrichten. Auch Erfolgsmeldungen kann man loggen. Falls der Entwickler dein Log erweitern will, sollte er dies tun dürfen.

Exakt. :)

(Optionale) Flags für Info, Error und Debug.

Diamondback2007 17. Jun 2008 08:38

Re: [Unit] Errorlog
 
Ja, vor allem ein Flag für Debug wäre super praktisch. :)

Fussball-Robby 24. Okt 2008 16:30

Re: [Unit] Errorlog
 
Nachdem dieser Thread völlig in Vergessenheit geraten ist, habe ich ihn eben wieder entdeckt und dachte mir, ich könnte doch mal die Verbesserungsvorschläge umsetzen, es gibt also eine neue Version der Unit UErrorLog :wink:


Zitat:

Zitat von Apollonius
ich finde es etwas unpassend, dass du bei jeder Exception die gesamte Datei neu schreibst. Mit den alten Pascal-Routinen geht das viel besser: Einfach mit Writeln anfügen und dann Flush aufrufen.

Die einzelnen Nachrichten werden nun nur noch angehängt, es wird nicht mehr die ganze Datei geladen. Vor allem bei langen Logs hätte dies schon zu Problemen geführt..
Zitat:

Zitat von Apollonius
Außerdem solltest du auch eine Methode veröffentlicht, die es dem Entwickler ermöglicht, eigene Nachrichten zu loggen.

Ist jetzt mit dem Befehl ErrorLog.Write() möglich, eine Erklärung dazu ist im 1. Post.

Auch die neue Version ist im 1. Post, ich hoffe wiederum, dass sie vielleicht irgendjemand mal gebrauchen kann. Auch Kritik/Verbesserungsvorschläge (evtl. auch Lob? :cyclops: ) sind natürlich immer gerne gesehen :zwinker:

Jonelmeier 30. Okt 2008 09:28

Re: [Unit] Errorlog
 
Also ich muss sagen, deine Unit ist echt super. Werde sie direkt in meinem Programm verwenden (wird bald hier in der DP Vorgestellt)...
Super Arbeit! :thumb:

Gruß aus Hamburg!

HeinzJ 30. Okt 2008 09:44

Re: [Unit] Errorlog
 
Ich habe mit Log4D gute erfahrungen gemacht. Ist dem Log4J hervorgegangen. Hackelig waren u.a. nur die Anpassungen der INDY Geschichten.

Anstatt auftretende Fehler und Infomeldungen auf die Standardausgabe auszugeben, wird die Nachricht über sogenannte Logger in das Loggingsystem geleitet und gleichzeitig eine Einteilung der Wichtigkeit vorgenommen. Der Programmierer muss sich beim Erstellen des Programms nur um die Wichtigkeit der Meldungen Gedanken machen. Die Filterung und Art der Ausgabe kann zur Laufzeit konfiguriert werden.

Relicted 30. Okt 2008 10:17

Re: [Unit] Errorlog
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich war mal so dreist und habe deine Unit etwas angepasst. Kannst es ja falls du magst übernehmen.
Die wichtigste "Neuerung" ist das implementieren des "Singleton Designpatterns".
Ich persönlich mag globale Variablen nicht - daher habe ich mal diesen "Umweg" implementiert.

Gruß
Reli

SubData 30. Okt 2008 10:20

Re: [Unit] Errorlog
 
So als kleine Anregung: HotLog

SimStar001 4. Dez 2008 01:32

Re: [Unit] Errorlog
 
Hallo, ich wollte deine ErrorLog Unit verwende, nur leider kommt immer wenn ich auf ErrorLog.Start gehe eine AcessViolation in meiner Anwendung!? wieso das!? was könnte ich da flasch machen?

Fussball-Robby 4. Dez 2008 11:17

Re: [Unit] Errorlog
 
Zitat:

Zitat von SimStar001
Hallo, ich wollte deine ErrorLog Unit verwende, nur leider kommt immer wenn ich auf ErrorLog.Start gehe eine AcessViolation in meiner Anwendung!? wieso das!? was könnte ich da flasch machen?

Eigentlich kann da garnichts schief gehen. Es sei denn, ErrorLog wurde nicht erzeugt. Das passiert aber eigentlich automatisch in der Unit selbst unter initialization. Kannst ja mal nachschauen, ob das in der Unit ganz am Ende richtig drinsteht:
Delphi-Quellcode:
initialization
  ErrorLog := TErrorLog.Create;

finalization
  if ErrorLog <> nil then
    ErrorLog.Free;

end.
Ansonsten weiß ich nicht, wo eine AV auftreten könnte. Kommt die denn nicht wenn du ErrorLog.Start auskommentierst?

Edit: Evtl. könntest du ja auch mal auf ErrorLog.Start einen Breakpoint setzen (mit F5) und dann mit F7 debuggen, sind ja nur 2 oder 3 Zeilen Code.

BUG 4. Dez 2008 16:36

Re: [Unit] Errorlog
 
Zitat:

Zitat von Fussball-Robby
Delphi-Quellcode:
initialization
  ErrorLog := TErrorLog.Create;

finalization
  //if ErrorLog <> nil then //<= diese Zeile wird AFAIK nicht gebraucht,
  ErrorLog.Free;           //   da in free auf nil geprüft wird

end.

Ist zwar kein Fehler, überprüft ErrorLog aber zweimal.


MfG,
Bug

Ruio 30. Jan 2009 16:53

Re: [Unit] Errorlog
 
Erstmal ist die Unit super.

Nur ich bekomme einen E/A-Fehler 32, wenn mehrere Anwendungen (andere und die selbe) auf den Log zugreifen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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