Skip to content

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).

php
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.

LogLevelBeschreibung
FatalFehler, durch den die gesamte Anwendung nicht funktioniert oder der Request abgebrochen werden muss
ErrorFehler, durch den ein Teil der Anwendung nicht funktioniert oder eine bestimmte Aktion nicht ausgeführt werden kann
WarningWarnung zu einer Situation, die zu Fehlern führen kann, aber nicht muss
InfoInformationen über planmäßiges Verhalten der Anwendung, zum Beispiel erfolgreich ausgeführte Aktionen
DebugInformationen 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.

php
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 Datenbanktabelle log, deren Schema im Model LogEntry definiert ist.
  • Der Handler csv speichert die Nachrichten als CSV-Dateien im Ordner storage/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 Handler csv.

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.

php
'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.

php
$items = Log::getAll();