Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vernünftiges loggen (https://www.delphipraxis.net/135607-vernuenftiges-loggen.html)

Mr_G 14. Jun 2009 13:57


Vernünftiges loggen
 
Hallo zusammen,
ich wollte mal fragen wie man ein vernünftiges Logging in seiner Anwendung veranstaltet. Ich habe z.B. mehrere Klassen mit denen ich verschiedene Zugriffe etc. manage. Natürlich ist auch eine Klasse fürs loggen dabei ;)
Mir stellt sich nun die Frage ob ich die verschiedenen Klassen nun so gestalte, dass ihnen die Instanz der Logging-Klasse bei der Erzeugung übergeben wird oder ob ich mit diversen Exceptions arbeiten soll und diese dann im Hauptteil abfangen und loggen sollte.
Wie stellt man das möglichst geschickt an?

jfheins 14. Jun 2009 14:29

Re: Vernünftiges loggen
 
Ich weis nicht, ob das jetzt die beste Lösung oder so ist, aber in meinem FTP-Programm hab ich auch ein Log schreiben lassen.

Da hat jede Klasse (okay, es war nur eine) ein Log-Event angeboten, die was zu sagen hatte. In dem Eventhandler kann dann die Nachricht z.B. in eine datei oder in ein Richedit geschrieben werden.

In deinem Fall würde also die Logging-Klasse Eventhandler bereitstellen, die mit den verschiedenen Klassen verknüft sind.

Vorteil: Man kann das Event behalndeln oder auch nicht, man muss der Klasse im Konstruktor keine Logging-Klasse übergeben. (Und die Klasse braucht nichts über die Logging-Klasse zu wissen)

Ist aber nur so ne Idee :angel2:

Mr_G 14. Jun 2009 15:20

Re: Vernünftiges loggen
 
Die Idee finde ich spitze!
Weitere Erfahrungen und Ideen?

jaenicke 14. Jun 2009 15:27

Re: Vernünftiges loggen
 
Ich habe das meistens via Singleton-Pattern gelöst, so dass ich auf ein globales Log-Objekt zugreifen konnte.
Vorteil: Ich muss nichts ändern um Logausgaben hinzuzufügen außer den Ausgaben selbst.
Nachteil: Die Unit muss überall in die uses.

quendolineDD 14. Jun 2009 15:43

Re: Vernünftiges loggen
 
Bei Events ist natürlich der Vorteil, das eben diese Log-Klasse nicht bekannt sein muss. Und es muss nicht geloggt werden, kann aber.

Mr_G 14. Jun 2009 19:11

Re: Vernünftiges loggen
 
Was ist denn zu dem Ansatz zu sagen mit Exceptions um sich zu werfen und diese dann zentral auszuwerten?

Die Muhkuh 14. Jun 2009 19:21

Re: Vernünftiges loggen
 
Zitat:

Zitat von Mr_G
Was ist denn zu dem Ansatz zu sagen mit Exceptions um sich zu werfen und diese dann zentral auszuwerten?

Exceptions sind, wie der Name schon sagt, Ausnahmen und damit würde ich kein Logging betreiben.

Ich persönlich nutze die gleiche Methode wie Sebastian, fahre mit dem auch ganz gut.

Mr_G 14. Jun 2009 19:37

Re: Vernünftiges loggen
 
Prinzipiell tendiere ich eher zu der Event-Lösung. Das hört sich in meinen Ohren sehr elegant an.
@Die Muhkuh: Es dreht sich ja schon um Fehler und nicht um Statusmeldungen die geloggt werden sollen.

jaenicke 14. Jun 2009 19:54

Re: Vernünftiges loggen
 
Zitat:

Zitat von Mr_G
Prinzipiell tendiere ich eher zu der Event-Lösung. Das hört sich in meinen Ohren sehr elegant an.

Solange man den damit verbundenen Aufwand nicht scheut ist das sicher eine gute objektorientierte Lösung.

Ich wäre dafür schlicht zu "faul", denn ich habe in einem Projekt meistens so viele Klassen, dass das ein erheblicher Aufwand wäre. (Weil ich meistens so weit wie möglich (und sinnvoll) modularisiere.)

moonwhaler 15. Jun 2009 13:34

Re: Vernünftiges loggen
 
Unter Java nutze ich Log4J, welches ich auch als globales Objekt anspreche (eben erwähntes Singleton).

Unter Delphi verwende ich jedoch Events, die von der zu "loggenden" Klasse geschmissen werden. Das macht das etwas eleganter und vor allem MUSS ich nicht loggen, kann aber die Events trotzdem auswerten und sogar noch ganz andere Sachen damit treiben.


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