Start · Sprachen · PHP · Referenz · openlog

openlog

Funktion

Öffnet eine Verbindung zum System-Log-Dienst (Syslog) und setzt Präfix, Optionsflags sowie die Log-Einrichtung für nachfolgende <code>syslog()</code>-Aufrufe.

seit PHP 4.0.0 Kategorie: http

Signatur

openlog(string $prefix, int $flags, int $facility): true

Beschreibung

openlog() initialisiert die Verbindung zum systemseitigen Protokolldienst (unter Unix/Linux: syslog, unter Windows: Event Log). Die Funktion muss nicht zwingend vor dem ersten syslog()-Aufruf aufgerufen werden, ermöglicht aber die gezielte Konfiguration von Präfix, Verhalten und Log-Kategorie.

Der Präfix wird jeder protokollierten Meldung vorangestellt und hilft dabei, Einträge im System-Log einer bestimmten Anwendung zuzuordnen (z. B. dem Anwendungsnamen). Die Flags steuern, wie der Log-Dienst geöffnet und genutzt wird (z. B. LOG_PID für die Prozess-ID, LOG_ODELAY für verzögertes Öffnen). Die Facility gibt an, welche Art von Programm die Meldungen erzeugt (z. B. LOG_USER für allgemeine Benutzer-Anwendungen, LOG_DAEMON für Hintergrundprozesse).

Nach Abschluss der Protokollierung sollte closelog() aufgerufen werden, um die Verbindung sauber zu schließen. Typische Anwendungsfälle sind Daemons, CLI-Skripte und serverseitige Anwendungen, die ihre Ereignisse in das systemweite Log schreiben möchten.

Parameter

Name Typ Default Beschreibung
$prefix Pflicht string Zeichenkette, die jeder Log-Meldung vorangestellt wird – üblicherweise der Anwendungs- oder Skriptname, z. B. 'meine-app'.
$flags Pflicht int Bitmaske aus Log-Optionen, z. B. LOG_PID (Prozess-ID anhängen), LOG_CONS (auf Konsole ausgeben falls syslog nicht verfügbar), LOG_ODELAY (Öffnen verzögern), LOG_NDELAY (sofort öffnen), LOG_PERROR (auch auf stderr ausgeben). Mehrere Flags werden mit | verknüpft.
$facility Pflicht int Konstante, die die Art der protokollierenden Anwendung beschreibt. Gängige Werte: LOG_USER (allgemeine Benutzeranwendungen), LOG_DAEMON (Hintergrundprozesse), LOG_LOCAL0LOG_LOCAL7 (lokale Verwendung), LOG_MAIL (Mail-Subsystem) usw.

Rückgabewert

Typ
true
Beschreibung
Gibt seit PHP 8.2 immer true zurück (vorher: bool, aber in der Praxis stets true).

Beispiele

Einfache Protokollierung mit openlog und syslog

<?php
// Verbindung zum Syslog öffnen
openlog('meine-app', LOG_PID | LOG_ODELAY, LOG_USER);

// Meldungen verschiedener Priorität protokollieren
syslog(LOG_INFO,    'Anwendung gestartet');
syslog(LOG_WARNING, 'Konfigurationsdatei nicht gefunden, verwende Standardwerte');
syslog(LOG_ERR,     'Datenbankverbindung fehlgeschlagen');

// Verbindung schließen
closelog();

echo "Meldungen wurden an den System-Log-Dienst übertragen.\n";
Meldungen wurden an den System-Log-Dienst übertragen.

Daemon-Protokollierung mit LOG_DAEMON und PID

<?php
// Typische Konfiguration für einen Hintergrundprozess
openlog('backup-daemon', LOG_PID | LOG_NDELAY | LOG_CONS, LOG_DAEMON);

function logDaemon(int $priority, string $message): void {
    syslog($priority, '[' . date('Y-m-d H:i:s') . '] ' . $message);
}

logDaemon(LOG_NOTICE, 'Backup-Job gestartet');

try {
    // Simulierter Backup-Vorgang
    // backup_files('/var/data', '/mnt/backup');
    logDaemon(LOG_INFO, 'Backup erfolgreich abgeschlossen');
} catch (\Throwable $e) {
    logDaemon(LOG_CRIT, 'Kritischer Fehler: ' . $e->getMessage());
}

closelog();

// Wichtig · Fallstricke

Plattformabhängigkeit: Die verfügbaren LOG_*-Facility-Konstanten wie LOG_DAEMON, LOG_LOCAL0 etc. sind nicht unter Windows verfügbar. Unter Windows werden alle Meldungen in das Windows Event Log geschrieben, unabhängig von der Facility.

Reihenfolge: openlog() muss nicht zwingend vor syslog() aufgerufen werden – PHP öffnet die Verbindung bei Bedarf automatisch. openlog() ist dennoch empfohlen, wenn Präfix oder Facility explizit gesetzt werden sollen.

Thread-Sicherheit: In Multi-Thread-Umgebungen (z. B. PHP-FPM mit mehreren Worker-Prozessen) kann der globale Zustand von openlog() zu unerwarteten Präfixen führen. Pro Prozess ist jedoch genau eine openlog-Konfiguration aktiv.

Siehe auch