Lors de l'utilisation de PHP pour la journalisation du système, la fonction CloseLlog () est utilisée pour fermer la connexion du journal système qui a été précédemment ouvert par OpenLog () . Les appels corrects Closelog () peuvent garantir que les données de journal sont entièrement écrites dans le journal système, mais dans le développement réel, il est souvent nécessaire de prêter attention à certains détails pour assurer l'intégrité des enregistrements de journal.
Cet article se concentrera sur la façon d'assurer l'intégrité et la sécurité du journal lors de l'appel de roselog () .
La fonction de Closelog () de PHP est utilisée pour fermer les connexions de journal système ouvertes via OpenLog () . OpenLog () vous permet de définir des identifiants de journal, des options et des installations, SysLog () est utilisé pour écrire des journaux, et CloseLog () ferme la connexion du journal et libère des ressources.
Exemple:
<?php
openlog("myapp", LOG_PID | LOG_PERROR, LOG_USER);
syslog(LOG_INFO, "Ceci est un journal de test");
closelog();
?>
Après avoir appelé Closelog () ici, le système actualisera toutes les données de journal en cache et fermera la connexion.
Appelé après avoir écrit tous les journaux : il est généralement recommandé d'appeler Closelog () après avoir terminé toute écriture de journaux. S'il est appelé fréquemment pendant le processus d'écriture du journal, cela entraînera une diminution de l'efficacité.
Appelé lorsque le script est exécuté : c'est une pratique courante d'appeler Closelog () à la fin du script pour s'assurer que tous les journaux sont soumis.
Closelog () synchronisera les données de journal qui n'ont pas été écrites dans le tampon au journal système. S'il n'est pas appelé, certains journaux peuvent être laissés dans le tampon et non écrits.
Assurez-vous que l'utilisateur exécutant PHP a la permission d'écrire au journal système, sinon appeler syslog () et roselog () ne peut garantir que le journal est écrit avec succès.
Si l'écriture du journal est une opération clé, les exceptions possibles doivent être gérées. Bien que Syslog () et Closelog () eux-mêmes ne lancent pas des exceptions, vous pouvez assurer une écriture en douceur en détectant l'environnement en cours d'exécution et l'état du fichier journal.
<?php
// Ouvrir le journal,Définir les identifiants et les options du journal
openlog("myapp", LOG_PID | LOG_CONS, LOG_USER);
// Écrivez plusieurs journaux
syslog(LOG_INFO, "Commencer à exécuter des tâches");
syslog(LOG_WARNING, "Légère avertissement");
syslog(LOG_ERR, "Une grave erreur s'est produite");
// Fermez le journal,Assurez-vous que le journal est écrit en entier
closelog();
?>
Parfois, le journal système peut ne pas répondre aux besoins, combiné avec des journaux de fichiers peut être complété:
<?php
openlog("myapp", LOG_PID, LOG_USER);
syslog(LOG_INFO, "Commencez à écrire dans les journaux de fichiers");
file_put_contents("/var/log/myapp.log", date('Y-m-d H:i:s')." Journal du contenu\n", FILE_APPEND);
syslog(LOG_INFO, "La rédaction du journal des fichiers est terminée");
closelog();
?>
Cela peut doubler l'intégrité des données de journal.
Évitez les appels prématurés : n'appelez pas le roselog () lorsque l'écriture du journal n'est pas terminée, sinon les journaux suivants ne seront pas écrits.
Mécanisme de mémoire tampon : les journaux système ont généralement des mécanismes tampon, Closelog () garantit que le tampon est rincé.
Synchronisation des journaux dans un environnement multithread : si le script PHP s'exécute dans un environnement multi-thread ou multi-traitement, assurez-vous que chaque processus appelle son propre Closelog () .