Einleitung: Warum ist Logging in PHP notwendig?
Logging ist nicht nur das Aufzeichnen von Fehlern in eine Datei. Es ist Ihr wichtigstes Werkzeug für die Überwachung, Fehlersuche und Analyse der Arbeit einer Webanwendung. Ohne qualitativ hochwertiges Logging werden Sie raten müssen, warum die Website abgestürzt ist oder warum ein Benutzer keine Bestellung aufgeben kann. Für angehende PHP-Entwickler ist die Einrichtung eines korrekten Loggings der erste Schritt zur professionellen Entwicklung.
Stellen Sie sich vor, Ihre Anwendung ist eine Blackbox. Logs sind die einzige Möglichkeit, einen Blick hineinzuwerfen und zu verstehen, was zu jedem Zeitpunkt passiert. In diesem Artikel werden wir die besten Praktiken durchgehen, die Ihnen helfen, typische Anfängerfehler zu vermeiden und ein zuverlässiges Überwachungssystem aufzubauen.
1. Grundlagen: Integrierte PHP-Funktionen für das Logging
PHP bietet mehrere integrierte Funktionen für die Arbeit mit Logs. Die einfachste und bekannteste ist error_log(). Sie ermöglicht es, eine Nachricht an das Systemlog des Servers oder in eine bestimmte Datei zu senden.
Basisbeispiel zur Verwendung von error_log()
// Einfachste Aufzeichnung eines Fehlers im Systemlogerror_log("Dies ist eine Fehlermeldung", 0);
// Aufzeichnung in eine bestimmte Dateierror_log("Fehler bei der Datenbankverbindung", 3, "/var/log/php_errors.log");
// Aufzeichnung mit Angabe des Nachrichtentypserror_log("Warnung: Langsame Anfrage", 4);Allerdings ist die direkte Verwendung von error_log() in der Produktion keine gute Idee. Erstens vermischen Sie verschiedene Nachrichtentypen. Zweitens ist es schwierig, das Format und die Rotation der Logs zu verwalten. Für ernsthafte Projekte ist es besser, spezialisierte Bibliotheken zu verwenden.
Konfiguration der php.ini für verbessertes Logging
Bevor Sie Code schreiben, stellen Sie sicher, dass Ihre php.ini richtig konfiguriert ist:
; Logging von Fehlern aktivierenlog_errors = On; Pfad zur Logdateierror_log = /var/log/php_errors.log; Maximale Loggröße (in Bytes)log_errors_max_len = 1024; Ausgabe von Fehlern auf dem Bildschirm deaktivieren (für die Produktion)display_errors = Off; Logging aller Fehlerstufen aktivierenerror_reporting = E_ALL2. Log-Level: Von DEBUG bis CRITICAL
Einer der häufigsten Anfängerfehler ist es, alle Nachrichten in einen Topf zu werfen. Professionelles Logging verwendet Schweregrade. Dies hilft, Logs schnell zu filtern und kritische Fehler nicht zwischen Informationsmeldungen zu übersehen.
Standard-Level nach PSR-3
Die PHP-Community hat den Standard PSR-3 verabschiedet, der 8 Log-Level definiert:
- DEBUG — detaillierte Debug-Informationen (nur in der Entwicklung verwenden)
- INFO — Informationsmeldungen (Benutzer registriert, Bestellung aufgegeben)
- NOTICE — normale, aber bedeutsame Ereignisse (Verwendung veralteter Funktionen)
- WARNING — Warnungen (z. B. langsame Anfrage, geringer Speicherplatz)
- ERROR — Fehler, die Aufmerksamkeit erfordern (Verbindung zur Datenbank fehlgeschlagen)
- CRITICAL — kritische Fehler (Hauptkomponente des Systems nicht verfügbar)
- ALERT — erfordert sofortiges Eingreifen (Hack, Systemausfall)
- EMERGENCY — System nicht funktionsfähig
Beispiel für die Implementierung von Leveln mit Monolog
Die beste Bibliothek für das Logging in PHP ist Monolog. Sie ist vollständig PSR-3-konform und leicht konfigurierbar:
use Monolog\\Logger;use Monolog\\Handler\\StreamHandler;use Monolog\\Handler\\RotatingFileHandler;use Monolog\\Level;
// Logger mit Kanalnamen erstellen$log = new Logger('app');
// Handler für alle Level hinzufügen$log->pushHandler(new StreamHandler('/var/log/app.log', Level::Debug));
// Separate Datei für kritische Fehler$log->pushHandler( new RotatingFileHandler('/var/log/critical.log', 30, Level::Critical));
// Is