Skip to content

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.

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

LevelBeschreibung
errorFehler, durch den der Request nicht wie erwartet verarbeitet werden kann
warningWarnung zu einer Situation, die zu Fehlern führen kann, aber nicht muss
infoInformationen über planmäßiges Verhalten der Anwendung
debugDebug-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.

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

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

php
$log_entries = Log::getAll();