PHP Lib LOGGER

© Christian PAULUS. Document créé le 27 novembre 2001 , mis à jour le 9 octobre 2011.

Ce n'est pas pour me vanter, mais il fait rudement chaud. Eugène Labiche

Accueil du site > PHP Lib > PHP Lib LOGGER

Librairie de fonctions / PHP 3

Fonctions PHP LOGGER : pour l’envoi de messages systèmes, via syslog.

kzo_logger () est, comme son homologue système ’logger’ présent sous certaines versions d’Unix, une simple interface avec le module syslog, en charge de noter les évènements de votre système.

kzo_logger () permet d’envoyer un message au système qui héberge votre site WEB à partir d’un script PHP. Il vous sera ainsi plus facile et surtout plus pratique de suivre pas à pas l’évolution de vos scripts lors du mode DEBUG, d’envoyer sur la console de votre serveur les messages importants, d’alerter le responsable de la machine lors d’une situation critique.

Les fonctions associées à syslog sont disponibles en PHP depuis sa version 3.0. Installation

  1. Créez le répertoire lib/ à la racine de votre serveur WEB (DocumentRoot).
  2. Installez l’include de la libraire dans ce répertoire.
  3. Définissez les paramètres de votre fichier /etc/syslog.conf puis relancez syslogd (ou kill -HUP).

Le résultat dépend de votre OS, en général, une ligne du style (dans /etc/syslog.conf) :

*.* /var/log/all.log

aura pour effet d’envoyer tous les résultats de sylog dans le fichier /var/log/all.log. C’est loin d’être pratique car les jokers ’*’ demandent à syslog de réceptionner tous les messages, de toutes les applications présentes sur votre serveur. On y trouvera de fait un journal d’un verbiage impressionnant et on lui préférera rapidement une ligne du style :

myapp.* /var/log/myapp.log

pour envoyer dans /var/log/myapp.log tous les messages de l’application « myapp » (on verra ci-dessous comment nommer l’application). Attention, tous les Unix n’offrent pas la possibilité de trier à la volée les messages "système". Il faudra parfois user d’un simple LOCAL7 ou quelque chose du genre (man syslog.conf).

Ne pas oublier de relancer syslogd, parfois un simple ‘kill –HUP’ sur le numéro de process pour demander à syslogd de relire son fichier de configuration suffira. Consultez le manuel de syslog pour en savoir plus (man syslogd).

Intégration

Il suffit juste d’appeler kzo_logger dans votre script PHP, par une ligne du style :

<?php
include("lib/kzo_logger.inc.php3");
?>

Si vous désirez voir afficher les messages de DEBUG, il faut déclarer la constante DEBUGMODE avant l’appel de logger() :

define("DEBUGMODE", LOG_DEBUG);

Si vous ne déclarez pas DEBUGMODE, vous pouvez bien sûr appeler kzo_logger() avec sa priorité LOG_DEBUG, mais le message n’apparaîtra pas dans les journaux.

Voici un code en exemple, à adapter pour votre serveur :

<?
// test.php
include("lib/kzo_logger.inc.php3");
echo("Ma page de test.");
// imprime la ligne, simplement
kzo_logger("ceci est un test");
// n'imprime pas: nous ne sommes pas en mode debug
kzo_logger("je ne suis pas en mode debug", LOG_DEBUG);
// on passe en mode DEBUG
define("DEBUGMODE", LOG_DEBUG);
// imprime le mode debug
kzo_logger("Je suis en mode DEBUG.", LOG_DEBUG);
// signe 'myapp' pour filtrage syslog
kzo_logger("Je m'appelle myapp.", LOG_DEBUG, "myapp");
// envoie une alerte
kzo_logger("Grabuge.", LOG_ALERT, "myapp");
?>

Ce script affichera dans le journal système :

Nov 27 08:47:43 helo test.php[643]: [INFO:192.168.1.200] ceci est un test
Nov 27 08:47:43 helo test.php[643]: [DEBUG:192.168.1.200] Je suis en mode DEBUG.
Nov 27 08:47:43 helo myapp[643]: [DEBUG:192.168.1.200] Je m'appelle myapp.
Nov 27 08:47:43 helo myapp[643]: [ALERT:192.168.1.200] Grabuge.

Dans les deux premières lignes, nous n’avons pas indiqué l’identification. kzo_logger() prend par défaut dans ce cas le nom du fichier qui l’appelle.

Conseils

Evitez les caractères diacritiques dans la composition de vos messages. Ils ne "passent" pas toujours très bien et peuvent poser quelques problèmes aux automates de statistiques.

Réfléchissez à la construction de vos messages. Qu’allez-vous-en faire par la suite ? Vont-ils servir à des outils de maintenance ? A des outils d’établissement de statistiques ? A des alertes envoyées par messagerie électronique ? A être directement imprimés ? etc.

Par exemple, en employant les caractères deux points ‘ :’ et crochets ’[]’ comme délimiteurs.

La ligne

Nov 27 08:47:43 helo myapp[643]: [DEBUG:192.168.1.200] Je m'appelle myapp.

est inscrite dans le journal. La première partie est la date du jour, l’heure, le nom de ma machine ’helo’. Ceci est inscrit directement par syslog. Inutile donc de les calculer. Tous les messages commenceront automatiquement par ces repères.

Le nom de mon petit programme ‘myapp’ est suivi du numéro de process PHP, entre crochets. La seconde partie entre crochets également, commence par indiquer la priorité du message et l’adresse IP de la machine cliente. Le message apparaît ensuite.

Nettoyage des journaux

Les journaux enregistrés par syslog peuvent être volumineux. Il n’est pas rare de les voir dépasser le méga-octets en quelques heures. Surtout si vous avez oublié de retirer le define DEBUGMODE lors du passage en production.

N’oubliez pas de mettre en place la ’rotary’, le script nécessaire à nettoyer vos journaux. Sinon, attendez vous à un cruel manque de place disque sous peu de temps. Sous BSD, /etc/newsyslog vous y aidera.

N’utilisez pas kzo_logger()

Si vous n’avez pas accès aux journaux sur le serveur distant, n’utilisez pas kzo_logger(), ou demandez l’avis du responsable du serveur qui héberge votre site. Il peut vous faire envoyer vos journaux dans votre répertoire personnel. Ce sera alors à vous de faire le ménage.

Suivre plusieurs journaux

Ouvrez plusieurs terminaux et lancez la commande ’tail -f’ sur le fichier journal de votre choix. Agrémentez d’un ’grep DEBUG’ par exemple pour ne suivre que les messages de DEBUG. Ce qui donne quelque chose du style :

tail -f /var/log/myapp.log | grep DEBUG

Zip - 754 octets
kzo_logger.inc-2.zip

A noter:

  • %m permet de récupérer le descriptif d’erreur de errno.
  • WinNT gère beaucoup moins de niveaux d’erreur (Event Log) qu’Unix.

Documentation : les manuels PHP (www.php.net), syslog, syslogd et syslog.conf pour Unix.

Plussoyez !

Les forums sont fermés.