Sven Rautenberg: wo logged ihr was?

Beitrag lesen

Moin!

ich möchte jetzt aber auch noch Userinput-Fehler mitloggen. Würde sich hier error_log anbieten, oder setzt ihr auf andere Lösungen? Der Vorteil von error_log wäre, soweit ich das beurteilen kann, dass man hier auch gleich mails (zum Beispiel an den admin) versenden kann.

Logging ist durchaus eine komplexe Angelegenheit. Denn es treffen hierbei ziemlich viele Aspekte aufeinander, die alle vernünftig geklärt werden wollen:

1. Was wird geloggt? Das kann nur der Code beantworten und ausführen, der eine Logmeldung loswerden will. Allerdings ist hierbei auch gleich die Frage zu stellen, ob man später eine Trennung nach Wichtigkeit der Meldung durchführen will. Also kommt zusätzlich zum tatsächlichen Meldungstext (fester String) oder zur Variablen (die lieber nicht sofort in einen String wandeln) auch noch eine eventuell recht umfangreiche Sammlung von Metadaten hinzu: Woher kommt die Meldung, wie wichtig ist sie (Log-Level Debug, Info, Warning, Error,...), was ist evtl. der Kontext (welche Applikation, welcher Zustand)?

2. Wohin wird geloggt? Der simpelste Fall: In eine Datei. Aber alles nur in EINE Datei zu schreiben kann schnell unübersichtlich werden. Also wird man eventuell je nach Quelle, Wichtigkeit oder Kontext separate Dateien haben wollen. Oder Mails verschicken. Oder auf Syslog schreiben. Oder in eine Datenbank.

3. Was wird wohin geloggt? Die Verbindung zwischen Punkt 1 (was) und 2 (wohin) könnte man als Logmeldungs-Routing bezeichnen.

Zum Glück gibt es für solche Probleme bereits existierende Lösungen - und ich würde immer dazu raten, sich bei diesem Problem nicht noch mal selbst an die Umsetzung einer eigenen Lösung zu machen.

Mein persönlicher Favorit ist Log4PHP. Technisch leider derzeit noch auf PHP-5.2-Niveau (also keine Namespaces etc.), aber funktional ganz vorne mit dabei. Kann von simpel bis Enterprise-Niveau.

Alternativen sind Monolog, Zend_Log (Version 1.12.*), Zend\Log (Version 2.*), und vermutlich noch zehn weitere, die mir nicht bekannt sind.

Alle genannten Varianten sind mit Composer installierbar.

- Sven Rautenberg