Bei der Verwendung von PHP für die Systemprotokollierung wird die Funktion Closelog () verwendet, um die zuvor von OpenLog () geöffnete Systemprotokollverbindung zu schließen. Richtiger Anruf von Closelog () kann sicherstellen, dass die Protokolldaten vollständig in das Systemprotokoll geschrieben sind. In der tatsächlichen Entwicklung müssen jedoch häufig einige Details beachtet werden, um die Integrität von Protokolldatensätzen sicherzustellen.
Dieser Artikel konzentriert sich darauf, wie die Integrität und Sicherheit des Protokolls beim Aufrufen von Closelog () sichergestellt werden kann.
Die Funktion closelog () von PHP wird verwendet, um Systemprotokollverbindungen zu schließen, die über OpenLog () geöffnet sind. Mit OpenLog () können Sie Log -Kennung, -optionen und -einrichtungen definieren, Syslog () wird verwendet, um Protokolle zu schreiben, und Closelog () schließt die Protokollverbindung und fördert die Ressourcen frei.
Beispiel:
<?php
openlog("myapp", LOG_PID | LOG_PERROR, LOG_USER);
syslog(LOG_INFO, "Dies ist ein Testprotokoll");
closelog();
?>
Nach dem Aufrufen von Closelog () aktualisiert das System alle zwischengespeicherten Protokolldaten und schließt die Verbindung.
Nach dem Schreiben aller Protokolle angerufen : Es wird im Allgemeinen empfohlen, Closelog () nach Abschluss des Schreibens von Protokollen aufzurufen. Wenn es während des Protokollschreibvorgangs häufig aufgerufen wird, führt dies zu einer Verringerung der Effizienz.
Aufgerufen, wenn das Skript ausgeführt wird : Es ist eine übliche Praxis, Closelog () am Ende des Skripts aufzurufen, um sicherzustellen, dass alle Protokolle eingereicht werden.
Closelog () synchronisieren Protokolldaten, die nicht in den Puffer in das Systemprotokoll geschrieben wurden. Wenn es nicht aufgerufen wird, können einige der Protokolle im Puffer gelassen und nicht geschrieben werden.
Stellen Sie sicher, dass der Benutzer, der PHP ausführt, die Erlaubnis hat, an das Systemprotokoll zu schreiben, ansonsten nicht syslog () und closelog () garantieren, dass das Protokoll erfolgreich geschrieben wird.
Wenn das Schreiben von Protokoll eine Schlüsseloperation ist, sollten mögliche Ausnahmen behandelt werden. Obwohl Syslog () und Closelog () selbst keine Ausnahmen werfen, können Sie ein reibungsloses Schreiben sicherstellen, indem Sie die laufende Umgebung und die Protokolldateistatus erkennen.
<?php
// Öffnen Sie das Protokoll,Definieren Sie die Log -Identifikatoren und -optionen
openlog("myapp", LOG_PID | LOG_CONS, LOG_USER);
// Schreiben Sie mehrere Protokolle
syslog(LOG_INFO, "Führen Sie Aufgaben aus");
syslog(LOG_WARNING, "Leichte Warnung");
syslog(LOG_ERR, "Es ist ein schwerwiegender Fehler aufgetreten");
// Schließen Sie das Protokoll,Stellen Sie sicher, dass das Protokoll vollständig geschrieben ist
closelog();
?>
Manchmal erfüllt das Systemprotokoll möglicherweise nicht die Anforderungen, kombiniert mit Dateiprotokollen können ergänzt werden:
<?php
openlog("myapp", LOG_PID, LOG_USER);
syslog(LOG_INFO, "Schreiben Sie in Dateiprotokolle");
file_put_contents("/var/log/myapp.log", date('Y-m-d H:i:s')." Protokollinhalt\n", FILE_APPEND);
syslog(LOG_INFO, "Das Schreiben von Dateiprotokoll ist abgeschlossen");
closelog();
?>
Dies kann die Integrität von Protokolldaten doppelt garantieren.
Vermeiden Sie vorzeitige Anrufe : Rufen Sie Closelog () nicht an, wenn das Protokollschreiben nicht abgeschlossen ist, andernfalls werden nachfolgende Protokolle nicht geschrieben.
Log -Pufferungsmechanismus : Systemprotokolle haben normalerweise Puffermechanismen, Closelog () stellt sicher, dass der Puffer gespült ist.
Protokollsynchronisation in einer Umgebung mit mehreren Threads : Wenn das PHP-Skript in einer Umgebung mit mehreren Threaded oder Multi-Process ausgeführt wird, stellen Sie sicher, dass jeder Prozess seinen eigenen Closelog () nennt.