Start · Sprachen · PHP · Referenz · SeasLog

SeasLog

Klasse

Hauptklasse der SeasLog-PECL-Erweiterung für hochperformantes, konfigurierbares Logging mit Unterstützung für verschiedene Log-Level und Ausgabe-Adapter.

Kategorie: misc

Signatur

class SeasLog

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
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;
}
Fehler im Log: 2

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