Logging
Die Logging-Funktionalität des Frameworks ermöglicht, an jeder Stelle des Projekts Nachrichten über diverse Ereignisse zu speichern. Dabei werden verschiedene Ausgabekanäle wie Datenbank und CSV-Dateien unterstützt.
Nutzung
Die Klasse RHRZ\Framework\Log
verfügt über folgende Methoden für übliche Log-Levels, jeweils mit der Signatur (string $message, mixed $data = null)
.
use RHRZ\Framework\Log;
Log::fatal('Die Anwendung funktioniert nicht.');
Log::error('Ein Fehler ist aufgetreten.');
Log::warning('Eine Warnung oder ein Hinweis.');
Log::info('Aktion erfolgreich ausgeführt.');
Log::debug('Information für die Fehlersuche.');
Dem Parameter $data
können zusätzliche Daten übergeben werden, die beim Speichern in JSON umgewandelt werden. Dabei sollte man jedoch sparsam vorgehen, um die Dateigröße der Log-Tabelle und Log-Dateien nicht zu schnell anwachsen zu lassen. Zum Beispiel könnte man statt eines gesamten Model-Objekts nur dessen id
speichern.
Log-Levels
Log-Levels beschreiben den Schweregrad der geloggten Ereignisse. Im Framework sind folgende Levels vordefiniert, die für die meisten Projekte ausreichen sollten.
LogLevel | Beschreibung |
---|---|
Fatal | Fehler, durch den die gesamte Anwendung nicht funktioniert oder der Request abgebrochen werden muss |
Error | Fehler, durch den ein Teil der Anwendung nicht funktioniert oder eine bestimmte Aktion nicht ausgeführt werden kann |
Warning | Warnung zu einer Situation, die zu Fehlern führen kann, aber nicht muss |
Info | Informationen über planmäßiges Verhalten der Anwendung, zum Beispiel erfolgreich ausgeführte Aktionen |
Debug | Informationen zur Fehlersuche bei der Entwicklung |
Standardmäßig werden die vier oberen Levels in der Datenbank und in CSV-Dateien geloggt, während Debug
-Nachrichten nur im Debug Panel ausgegeben werden. Dieses Verhalten kann konfiguriert werden.
Eigene Levels
Bei Bedarf können eigene Log-Levels im Enum App\Models\Enums\LogLevel
ergänzt werden. Mit der Methode Log::write(LogLevel $level, string $message, mixed $data = null)
kann eine Nachricht mit einem selbst definierten Level geloggt werden.
Log::write(LogLevel::Custom, 'Nachricht mit eigenem Log-Level');
Log-Handler
Log-Handler sind dafür zuständig, geloggte Nachrichten über verschiedene Ausgabekanäle zu speichern. Im LogProvider
sind bereits folgende Handler definiert.
- Der Handler
db
speichert die Nachrichten in der Datenbanktabellelog
, deren Schema im ModelLogEntry
definiert ist. - Der Handler
csv
speichert die Nachrichten als CSV-Dateien im Ordnerstorage/logs
, wobei für jeden Monat ein Unterordner und für jeden Tag eine neue Datei erstellt wird. - Der Handler
txt
speichert die Nachrichten als Textdateien in denselben Ordnern wie der Handlercsv
.
Konfiguration
In der Datei env.php
wird festgelegt, welche Log-Levels von welchen Handlern verarbeitet werden sollen. Der Platzhalter *
kann verwendet werden, um alle Log-Levels zu erfassen.
'log.db' => 'fatal,error,warning,info',
'log.csv' => 'fatal,error,warning,info',
'log.txt' => '',
Standardmäßig ist demnach der Handler txt
deaktiviert, während die Handler db
und csv
alle Levels außer debug
loggen.
Eigene Handler
Eigene Handler können ergänzt werden, indem der im Framework enthaltene LogProvider
durch eine selbst definierte Klasse App\Providers\LogProvider
ersetzt wird (siehe Kernels).
Log auslesen
Alle während des aktuellen Requests geloggten Nachrichten werden im Debug Panel ausgegeben. Alternativ ist auch ein Zugriff im Code über folgende Methode möglich.
$items = Log::getAll();