Position actuelle: Accueil> Derniers articles> Comment utiliser les appels de fonction syslog pour enregistrer les journaux d'erreur au niveau du serveur?

Comment utiliser les appels de fonction syslog pour enregistrer les journaux d'erreur au niveau du serveur?

gitbox 2025-06-23

1. Introduction à la fonction syslog ()

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.

2. Syntaxe de base de l'utilisation de la fonction syslog ()

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.

3. Configurer Syslog

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 ).

4. Journal du journal

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">&lt;?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&#39;il s&#39;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>-&gt;</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">?&gt;</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.

5. Journaux des journaux personnalisés

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">&lt;?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">?&gt;</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.

6. Utilisation avancée: format de journal personnalisé

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">&lt;?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">?&gt;</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 () .

7. Configurer l'emplacement de sortie de 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>

8. FAQ et solutions

  • 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.