PHPs Closelog () ist idempotent, und es wird kein Fehler auftreten, wenn es mehrmals aufgerufen wird. Dies kann das Problem der wiederholten Reinigung von Ressourcen im Programm maskieren. Beispielsweise wird eine Funktion wiederholt aufgerufen, aber Closelog () wird jedes Mal ausgeführt, was bedeuten kann, dass die Ressourcenverwaltungslogik nicht klar ist.
Fehlerbehebung Methode:
Verkapselende logarithmische Anrufe einkapseln, um zu vermeiden, dass Closelog () direkt an mehreren Stellen aufgerufen wird.
Verwenden Sie Protokoll -Wrapper -Klassen oder -schemata (wie Singletons), um den Lebenszyklus für die Log -Verbindungslebenszyklus zentral zu steuern.
Das Protokollsystem kann nach Syslog () Puffer haben. Wenn Closelog () sofort geschlossen ist () , kann das Protokoll nicht rechtzeitig geschrieben werden, insbesondere in hohen Parallelitäts- oder besonderen Umgebungen.
Fehlerbehebung Methode:
Einführung von Verzögerungen nach dem Aufrufen von syslog () (nur zum Testen und Überprüfungen verwendet, nicht für die Produktion empfohlen);
Versuchen Sie, Closelog () am Ende des Skripts oder in der Zerstörungsphase zu rufen, anstatt es unmittelbar nach jedem Protokoll zu schließen.
<span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">"example"</span></span><span>, LOG_PID | LOG_PERROR, LOG_LOCAL0);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_INFO, </span><span><span class="hljs-string">"Ein Testprotokoll"</span></span><span>);
</span><span><span class="hljs-comment">// Nicht sofort closelog(),Es sollte am Ende des Skripts einheitlich aufgerufen werden</span></span><span>
</span></span>
Manchmal, selbst wenn Closelog () richtig aufgerufen wird, ist das Protokoll nicht geschrieben. Der mögliche Grund ist, dass OpenLog () einen ungültigen Protokolltyp (Einrichtung) verwendet oder das System keine Protokollberechtigungen für diesen Typ aktiviert.
Fehlerbehebung Methode:
Überprüfen Sie, ob die in OpenLog () verwendete Einrichtung vom System unterstützt wird.
Überprüfen Sie, ob die entsprechende Einrichtung in der Syslog -Konfigurationsdatei des Systems aktiviert ist (z. B. /etc/rsyslog.conf oder /etc/syslog.conf );
Überprüfen Sie die Protokolldateiberechtigungen oder verwenden Sie den Befehl Logger, um manuell zu testen.