Signatur
Beschreibung
SeasLog ist die zentrale Klasse der gleichnamigen PECL-Erweiterung und bietet eine sehr schnelle, in C implementierte Logging-Lösung für PHP-Anwendungen. Sie unterstützt sämtliche RFC-5424-Log-Level (DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY) und kann Logs in Dateien, über TCP/UDP oder in andere Adapter schreiben.
Im Gegensatz zu rein in PHP geschriebenen Logging-Bibliotheken arbeitet SeasLog auf Erweiterungsebene und verursacht dadurch deutlich weniger Overhead. Die Klasse kann statisch (SeasLog::info(...)) oder instanzbasiert verwendet werden. Über SeasLog::setBasePath() und SeasLog::setLogger() lassen sich Pfad und Kanal zur Laufzeit anpassen.
Typische Einsatzgebiete sind Produktionssysteme mit hohem Request-Volumen, bei denen herkömmliche PHP-Logger zu langsam wären, oder Szenarien, in denen strukturierte Log-Dateien nach Datum oder Modul aufgeteilt werden sollen. SeasLog puffert Log-Einträge intern und schreibt sie gebündelt, was I/O-Operationen minimiert.
Die Erweiterung muss über PECL (pecl install seaslog) installiert und in der php.ini aktiviert werden. Konfigurationsoptionen wie seaslog.default_basepath, seaslog.default_logger und seaslog.appender steuern das grundlegende Verhalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $basePath | string | Optionaler Basis-Pfad für Log-Dateien beim Erstellen einer Instanz. Überschreibt den in php.ini gesetzten Standardpfad (seaslog.default_basepath). |
|
| $logger | string | Optionaler Logger-Name (Unterverzeichnis / Kanal), der beim Instanzieren gesetzt wird. Entspricht dem Aufruf von SeasLog::setLogger() nach der Instantiierung. |
Beispiele
Statische Verwendung mit verschiedenen Log-Levels
<?php
// Basis-Pfad und Logger konfigurieren
SeasLog::setBasePath('/var/log/myapp');
SeasLog::setLogger('api');
// Verschiedene Log-Level nutzen
SeasLog::debug('Datenbankabfrage gestartet: {sql}', ['sql' => 'SELECT * FROM users']);
SeasLog::info('Benutzer {user} hat sich angemeldet.', ['user' => 'alice']);
SeasLog::warning('Speichernutzung über 80 %.');
SeasLog::error('Verbindung zu Redis fehlgeschlagen.');
SeasLog::critical('Datenbankverbindung nicht verfügbar!');
// Aktuellen Logger ausgeben
echo SeasLog::getLastLogger(); // api
Instanzbasiertes Logging mit mehreren Kanälen
<?php
// Instanz für den 'payment'-Kanal
$paymentLog = new SeasLog('/var/log/myapp', 'payment');
$paymentLog::info('Zahlung eingegangen: {amount} EUR', ['amount' => '49.99']);
$paymentLog::error('Zahlungsanbieter antwortet nicht.');
// Separate Instanz für den 'auth'-Kanal
$authLog = new SeasLog('/var/log/myapp', 'auth');
$authLog::warning('Fehlgeschlagener Login-Versuch für {user}.', ['user' => 'mallory']);
// Gepufferte Logs werden am Request-Ende automatisch geschrieben
// Manuelles Leeren des Puffers:
SeasLog::flushBuffer();
Log-Einträge analysieren und zählen
<?php
SeasLog::setBasePath('/var/log/myapp');
SeasLog::setLogger('worker');
SeasLog::error('Job fehlgeschlagen.');
SeasLog::error('Timeout aufgetreten.');
SeasLog::info('Job erfolgreich abgeschlossen.');
// Anzahl der ERROR-Einträge im aktuellen Log abrufen
$errorCount = SeasLog::countLogs(SEASLOG_ERROR);
echo 'Fehler im Log: ' . $errorCount . PHP_EOL;
// Log-Einträge als Array lesen (letzten 10 ERROR-Einträge)
$errors = SeasLog::getLogs(SEASLOG_ERROR, 'worker', 10);
foreach ($errors as $entry) {
echo $entry . PHP_EOL;
}
// Wichtig · Fallstricke
Installation: SeasLog ist keine Standard-PHP-Erweiterung und muss separat installiert werden: pecl install seaslog gefolgt von extension=seaslog.so in der php.ini.
Sicherheit: Log-Nachrichten sollten keine sensiblen Daten wie Passwörter, Tokens oder vollständige persönliche Daten enthalten, da Log-Dateien häufig weniger streng abgesichert sind als Datenbanken. Stellen Sie sicher, dass der Log-Pfad außerhalb des Web-Roots liegt und korrekte Dateisystemrechte gesetzt sind.
Konfiguration (php.ini): Wichtige Direktiven sind seaslog.default_basepath, seaslog.default_logger, seaslog.appender (1 = Datei, 2 = TCP, 3 = UDP), seaslog.remote_host und seaslog.remote_port für entfernte Appender.
Pufferung: SeasLog puffert Einträge standardmäßig und schreibt sie am Ende des Requests. Bei langlaufenden Prozessen (CLI, Daemons) sollte SeasLog::flushBuffer() regelmäßig aufgerufen werden, um Datenverlust bei Abstürzen zu vermeiden.