Signatur
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_LOCAL0–LOG_LOCAL7 (lokale Verwendung), LOG_MAIL (Mail-Subsystem) usw. |
Rückgabewert
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";
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.