PHP closelog() Funktion: Was sie ist und wie man sie verwendet
Die PHP-Funktion closelog() schließt die Verbindung zum System-Logger (syslog) und gibt zugehörige Ressourcen frei.
Die Funktion closelog() schließt die Verbindung, die PHP zum System-Logger (syslog) offen hält. Man öffnet diese Verbindung mit openlog(), schreibt mit syslog() in sie hinein, und closelog() ist der passende Aufruf, der die Verbindung wieder abbaut. Diese Seite erklärt, was die Funktion tut, ihre Signatur und ihren Rückgabewert, wann man sie wirklich benötigt und wie sie in einen typischen Logging-Ablauf passt.
Syntax
closelog(): trueDie Funktion nimmt keine Argumente entgegen. Ab PHP 8.0 gibt sie immer true zurück; in PHP 7 und älteren Versionen war der deklarierte Rückgabetyp bool. Das Ergebnis muss man fast nie überprüfen.
Was closelog() tut
closelog() schließt den Deskriptor, den PHP zum System-Logger geöffnet hat, und gibt die mit dieser Verbindung verbundenen Ressourcen frei. Ein paar wissenswerte Details:
closelog()aufzurufen ist optional. PHP schließt die syslog-Verbindung automatisch, wenn das Skript endet. Für kurzlebige Web-Anfragen muss man es daher selten explizit aufrufen.- Es ist nur sinnvoll, wenn eine Verbindung besteht. Den Aufruf zu tätigen, wenn keine
openlog()/syslog()-Verbindung offen ist, ist harmlos und bewirkt einfach nichts Nützliches. - Nach
closelog()öffnet der nächste Aufruf vonsyslog()die Verbindung automatisch wieder – optional unter erneuter Berücksichtigung desident-Werts und der Optionen, die einem frischenopenlog()-Aufruf übergeben wurden.
Wann man es wirklich braucht
Da PHP am Ende der Anfrage aufräumt, sind die Fälle, in denen closelog() wichtig ist, lang laufende oder Mehrkontext-Skripte:
- Lang laufende CLI-Worker und Daemons. Ein Prozess, der stundenlang aktiv ist, sollte Datei-Deskriptoren freigeben, die er nicht mehr benötigt, anstatt sie offen zu halten.
- Wechsel der Log-Identität. Wenn spätere Meldungen eine andere
identoder Facility verwenden sollen, ruft mancloselog()auf und anschließend erneutopenlog()mit den neuen Einstellungen. - Sauberkeit in gemeinsamem Code. In einer Bibliothek, die eine eigene syslog-Verbindung öffnet, verhindert das Schließen, dass diese Verbindung in den Code des Aufrufers durchsickert.
Wie man closelog() verwendet
Die Verwendung ist ein einziger Aufruf ohne Argumente. Das typische Muster lautet: öffnen → schreiben → schließen:
<?php
// Open a connection, tagging each line with "myapp" and the process ID
openlog("myapp", LOG_PID | LOG_PERROR, LOG_LOCAL0);
// Write a message at the INFO priority level
syslog(LOG_INFO, "User login succeeded");
// Release the connection
closelog();LOG_PID fügt die Prozess-ID zu jedem Eintrag hinzu, LOG_PERROR gibt die Meldung zusätzlich auf die Standardfehlerausgabe aus, und LOG_LOCAL0 wählt eine Logging-Facility aus. Siehe openlog() für die vollständige Liste der Optionen und Facilities.
Verbindung mit neuer Identität wiederverwenden
closelog() ist der saubere Weg, um das Tag (ident) für nachfolgende Meldungen zu wechseln:
<?php
openlog("auth-service", LOG_PID, LOG_LOCAL0);
syslog(LOG_NOTICE, "Authentication attempt");
closelog();
// Later messages are tagged "billing-service" instead
openlog("billing-service", LOG_PID, LOG_LOCAL0);
syslog(LOG_NOTICE, "Invoice generated");
closelog();Häufige Fehler
- Erwarten, dass
closelog()einen Puffer leert oder Logs „speichert". Jedersyslog()-Aufruf übergibt die Meldung bereits an den System-Logger;closelog()schließt nur die Verbindung. - Den Aufruf nach jeder einzelnen Meldung tätigen. Wiederholtes Öffnen und Schließen erzeugt Overhead. Bei einer einfachen Anfrage öffnet man einmal, schreibt beliebig viele Zeilen und schließt am Ende – oder lässt PHP es für einen erledigen.
- Annehmen, dass es weiteres Logging unterbindet. Ein späterer
syslog()-Aufruf öffnet die Verbindung transparent wieder –closelog()sperrt das Logging nicht aus.
Verwandte Funktionen
Fazit
closelog() schließt die syslog-Verbindung, die von openlog() geöffnet wurde, und gibt deren Ressourcen frei. Die Funktion nimmt keine Argumente entgegen und gibt true zurück. Bei gewöhnlichen Web-Anfragen schließt PHP die Verbindung von selbst; closelog() sollte man hauptsächlich in lang laufenden Prozessen oder dann verwenden, wenn man die Logging-Identität mitten im Skript wechseln möchte.