Logging
Die Klasse RHRZ\Framework\Log
ermöglicht, an jeder Stelle des Projekts Nachrichten zu loggen. Dabei werden verschiedene Ausgabekanäle wie Datenbank und Textdateien unterstützt.
Nutzung
Für die Log-Levels error
, warning
, info
und debug
gibt es jeweils eine Methode mit der Signatur string $message, mixed $data = null
.
use RHRZ\Framework\Log;
Log::error('Ein Fehler ist aufgetreten');
Dem Parameter $data
können zusätzliche Daten übergeben werden, die beim Speichern in JSON umgewandelt werden.
Log-Levels
Das Log-Level beschreibt den Schweregrad eines Ereignisses. Im Framework sind folgende Levels vorgesehen, die in den meisten Fällen ausreichen sollten.
Level | Beschreibung |
---|---|
error | Fehler, durch den der Request nicht wie erwartet verarbeitet werden kann |
warning | Warnung zu einer Situation, die zu Fehlern führen kann, aber nicht muss |
info | Informationen über planmäßiges Verhalten der Anwendung |
debug | Debug-Nachrichten zur Fehlersuche bei der Entwicklung |
Eigene Levels
Mit der Methode Log::write(string $level, string $message, mixed $data = null)
kann eine Nachricht mit einem beliebigen Level (bis 20 Zeichen) geloggt werden.
Log::write('custom', 'Nachricht mit eigenem Log-Level');
Log-Handler
Log-Handler sind dafür zuständig, geloggte Nachrichten über verschiedene Ausgabekanäle zu speichern. Im Provider LogProvider
sind bereits zwei Handler definiert.
- Der Handler
db
speichert die Log-Nachrichten in der Datenbanktabellelog
, deren Schema im ModelLogEntry
definiert ist. - Der Handler
file
speichert die Log-Nachrichten als Textdateien im Ordnerstorage/logs
, wobei für jeden Monat ein Unterordner und für jeden Tag eine neue Datei erstellt wird.
Konfiguration
In der Datei env.php
wird festgelegt, welche Log-Levels von welchem Handler erfasst werden sollen. Der Platzhalter *
bedeutet, dass alle Log-Levels erfasst werden.
'log.db' => 'error,warning,info',
'log.file' => 'error,warning',
Eigene Handler
Eigene Handler können ergänzt werden, indem die Klasse LogProvider
durch eine eigene Klasse App\Providers\LogProvider
erweitert wird, die daraufhin in den Kernels eingebunden wird.
Log auslesen
Die während des aktuellen Requests geloggten Nachrichten können mit der Methode Log::getAll()
ausgelesen werden.
$log_entries = Log::getAll();