AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Konzeptfrage: abgeleitete Exception-Klasse, die automatisch loggt
Thema durchsuchen
Ansicht
Themen-Optionen

Konzeptfrage: abgeleitete Exception-Klasse, die automatisch loggt

Ein Thema von s.h.a.r.k · begonnen am 9. Dez 2010 · letzter Beitrag vom 4. Jan 2011
 
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

AW: Konzeptfrage: abgeleitete Exception-Klasse, die automatisch loggt

  Alt 9. Dez 2010, 20:42
Moin,

ich kann leider nichts aus der Delphi-Ecke beitragen, aber in der PHP-Entwicklung hat man ja dasselbe Problem.

Prinzipiell geht es bei uns (auf Arbeit) so dass wir erstmal das Observer pattern umgesetzt haben. Dazu haben wir eine Event-Dispatcher-Klasse, die wie folgt aufgerufen wird:
Event_Dispatcher::getInstance()->triggerEvent($eventName, $priority, $eventData)
Damit wird ein Event an die Queue $eventName geschickt - was das ist ist wirklich egal solange es als String repraesentiert werden kann (kann also auch ein Exception-Objekt sein).

Nun kann man noch ein Objekt an verschiedene Queues anhaengen:
Event_Dispatcher::getInstance()->attachHandler($eventNames, $handler)
$eventHandler muss lediglich ein bestimmtes Interface implementieren um die Message anzunehmen. Wir haben eine Logger-Klasse die die Events filtert (z.B. nach Prio) und irgendwohin schiebt (File-Log, Firebug-Log, sogar ein SMS-Interface koennte dahinter liegen)

Prinzipiell koennen wir also sowas machen:
PHP-Quellcode:
try {
    $this->foo();
} catch (SomeException $e) {
    $this->doSomethingToFixThisStuff();
    EventHandler::getInstance()->triggerEvent('myCoolEventQueue', Zend_Log::ERR, $e->getMessage());
    EventHandler::getInstance()->triggerEvent('myCoolEventQueue', Zend_Log::DEBUG, $e);
}
Zu Deutsch schicken wir eine Exception einmal mit der Prio "Error" an die Queue, danach schicken wir die komplette Message mit Prio "Debug" an die Queue - so macht das Debuggen dann mehr Spass. So koennen wir z.B. einen File-Logger auf die Fehlermeldungen ansetzen (v.a. im Live-Betrieb), im Dev-Betrieb auch einen Firebug-Logger (der macht das Ganze schnell im Browser verfuegbar) mit Prio "Debug" auf dieselbe Queue.

Nun koennten (darauf haben wir bisher verzichtet, schliesslich ist die obige Loesung sehr umfangreich) wir auch unsere Exception-Klasse (leitet von der Standard-PHP-Exception ab) so anpassen, dass sie im Konstruktor automatisch die Message an eine bestimmte Queue (z.B. dem Klassennamen der Exception) schicken, auch wieder mit der obigen Err/Debug-Spezifizierung.
Der Grund warum wir das nicht gemacht haben ist simpel: nicht jede Exception die geworfen wird muss geloggt werden (schliesslich behandelt man sowas ja auch). Andererseits reicht es auch nicht, nur unbehandelte Exceptions zu loggen. Man will ja schliesslich auch mal eine Exception abfangen um eine "schoene" Meldung anzuzeigen und den Fehler aber trotzdem loggen. So oder so muesste man also noch zusaetzlichen Aufwand betreiben um das gewuenschte Ergebnis zu erhalten. Deshalb wird lediglich das geloggt, was die Queue macht. Einzelne Komponenten haben natuerlich ihre eigenen Queues (z.B. werden im XML-RPC-Server automatisch alle Exceptions geloggt und nicht nach aussen gegeben), aber die Anwendungen die wir entwickeln schreiben nicht automatisch alle Exceptions mit.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 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