Hallihallo!
Tach!
Das tolle am Destruktor ist auch, dass er vermutlich nicht mehr ausgeführt wird, wenn man einen fatalen PHP-Fehler kriegt. Und gerade Logging wäre dann eventuell sehr hilfreich gewesen...
Ja, hab ich auch gesagt. Außerdem gibt es da noch die Möglichkeiten von error_log(), mit denen man auch (absturzsicher) einzeilig Fehler in Dateien und andere Stellen bringen kann.
Jaaajaaa, lästert Ihr mal ruhig :-)
Wie ich ja schon geschrieben hatte, ist dieses Beispiel stark vereinfacht gewesen.
Der eigentliche Sinn, den ich mit der Klasse verfolgt hatte, war nämlich, sowohl unterscheiden zu können, WIE die Nachrichten gespeichert werden sollen, als auch an die Nachrichten zum Zweck der späteren Ausgabe nochmal ranzukommen. Beispielsweise gebe ich sie in einer Antwort-Mail zurück, wenn ich meinem Skript "Befehle" per Mail geschickt habe.
Geloggt werden so Sachen wie "INFO : Benutzer soundso will Methode soundso ausführen" und
"WARNING : Benutzer soundso DARF das gar nicht! Wie konnte er die Option dafür überhaupt bekommen?"
oder
"ERROR : die Datenbank ist nicht auswählbar" oder
"INFO: Benutzer soundso hat sich angemeldet"
oder
"INFO: Deine 20 Datensätze wurden gespeichert"
Sowas eben...
Um eine echte Fehlersuche geht es in dieser Klasse gar nicht. Dafür wird, wie schon erwähnt, das error log benutzt.
Obwohl ich zugeben muss, dass meine Exception Klasse auch ein eigenes Log- Objekt benutzt, und zwar in einer Form, die dieser vereinfachten hier sehr nahe kommt. Sprich: erst im Destruktor werden die Dateien angelegt und geschrieben. Und hier ist es tatsächlich so: Die Datei WIRD geschrieben. Auch dann, wenn die Exception nicht gefangen wird, was in einem catchable fatal error endet. Aber darum geht es hier gar nicht...
Halten wir also fest: DIESE MEINE log- Klasse ist NICHT zum Loggen von "echten" Programmfehlern gedacht, sondern von Bedienerfehlern oder Hinweisen für den Bediener. Und dafür hat sie sich bewährt.
Während der Debug-Phase behelfe ich mir mit set_error_handler() und einer Funktion, die mir ein error log anlegt. Das ist per FTP dann leichter zu erreichen als das originale...
Vielleicht sollte ich noch dazu sagen, dass ich meinen Entwicklungsserver zwar direkt neben mir stehen habe, aber er hat weder Monitor noch Tastatur (es ist ein RaspberryPi unter meinem Schreibtisch)
Beste Grüsse,
Tobias Hahner