Syslog () est une fonction intégrée en PHP qui envoie des messages au journal système. Contrairement à l'écriture directement dans les journaux de fichiers, Syslog () enregistrera les journaux aux fichiers journaux du système d'exploitation (tels que / var / log / syslog ou / var / log / messages ), ce qui est un moyen très pratique pour les administrateurs système pour gérer les journaux centralement.
L'utilisation de base de la fonction syslog () est la suivante:
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$priority</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$message</span></span><span>);
</span></span>
$ prioritaire : la priorité des messages journaux. Les niveaux de priorité pris en charge par PHP sont:
Log_emerg : le système n'est pas disponible
LOG_ALERT : Mesures immédiates requises
Log_crit : erreur critique
Log_err : erreur générale
Log_warning : message d'avertissement
Log_notice : événement normal mais important
Log_info : informations générales
LOG_DEBUG : DÉBUG INFORMATIONS
$ Message : le message du journal à enregistrer, généralement d'un type de chaîne.
Avant d'utiliser syslog () en php, vous devez généralement appeler la fonction openlog () pour initialiser la session de journalisation. OpenLog () spécifie l'identifiant de journal, la catégorie de journal et la priorité du traitement du journal.
<span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span></span>
Description du paramètre:
«MyApp» : l'identifiant de journal, qui peut être le nom de votre application, aide à distinguer les journaux des différentes applications.
LOG_CONS : Si le journal système n'est pas disponible, sortie en erreur standard.
LOG_PID : inclut l'ID de processus dans chaque message de journal.
LOG_NDELAY : Ouvrez immédiatement la session de journal et n'attendez pas que les informations du journal soient écrites avant de commencer.
LOG_LOCAL1 : Spécifiez la catégorie de journal, vous pouvez sélectionner le niveau de journal local (tel que log_local0 à log_local7 ).
En règle générale, les journaux d'erreur de journalisation sont effectués après qu'une exception ou une erreur est faite. Supposons qu'il existe une opération de connexion de la base de données dans votre application PHP, lorsque la connexion de la base de données échoue, vous devrez peut-être enregistrer l'erreur au journal système.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-comment">// Supposons qu'il s'agit du code de la connexion de la base de données</span></span><span>
</span><span><span class="hljs-variable">$db</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_ERR, </span><span><span class="hljs-string">'Database connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>());
}
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dans le code ci-dessus, lorsque la connexion de la base de données échoue, la fonction syslog () enregistrera le message d'erreur dans le journal système. Log_err La priorité signifie qu'il s'agit d'une erreur générale.
En plus d'enregistrer les messages d'erreur, syslog () peut également être utilisé pour enregistrer certaines informations générales, telles que l'état de l'application, les opérations clés, etc. par exemple:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_INFO, </span><span><span class="hljs-string">'Application started successfully.'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_NOTICE, </span><span><span class="hljs-string">'User logged in with ID: 12345.'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Ce code montre comment enregistrer les journaux au niveau des informations. Log_info représente des informations générales, tandis que Log_notice peut être utilisé pour enregistrer certains événements qui nécessitent une attention.
La fonction syslog () elle-même ne prend pas en charge les formats de journal personnalisés. Cependant, vous pouvez formater manuellement les messages avant d'envoyer le journal, par exemple:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-variable">$userId</span></span><span> = </span><span><span class="hljs-number">12345</span></span><span>;
</span><span><span class="hljs-variable">$action</span></span><span> = </span><span><span class="hljs-string">'User logged in'</span></span><span>;
</span><span><span class="hljs-variable">$logMessage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">sprintf</span></span><span>(</span><span><span class="hljs-string">'UserID: %d - Action: %s'</span></span><span>, </span><span><span class="hljs-variable">$userId</span></span><span>, </span><span><span class="hljs-variable">$action</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_NOTICE, </span><span><span class="hljs-variable">$logMessage</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Ici, nous utilisons la fonction sprintf () pour générer dynamiquement le contenu de journal et le passer en tant que chaîne à syslog () .
Les informations enregistrées par Syslog sont généralement écrites dans le fichier journal système. Vous pouvez spécifier l'emplacement de sortie de la connexion dans le fichier de configuration du système. Sur les systèmes Linux, les journaux sont généralement stockés dans / var / log / syslog ou / var / log / messages .
Vous pouvez afficher les journaux par:
<span><span><span class="hljs-built_in">tail</span></span><span> -f /var/log/syslog
</span></span>
Enregistrez non écrit : assurez-vous que Syslog est activé dans le fichier de configuration PHP et vérifiez les autorisations du fichier journal système.
Fichiers journaux trop grands : La journalisation à long terme peut entraîner des fichiers journaux très importants. Les anciens journaux peuvent être nettoyés et archivés régulièrement via le mécanisme de rotation des journaux.
Problème des autorisations de journal : Assurez-vous que le processus PHP a une autorisation suffisante pour rédiger des informations au journal système. Si les autorisations sont insuffisantes, vous devrez peut-être ajuster les autorisations du fichier journal système.