PHP Lib LOGGER
© Christian Paulus - Document créé le 2001-01-01, mis à jour le 2008-12-11
Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert
Fonctions PHP LOGGER: pour l'envoi de messages systèmes, via syslog.
Une fonction IS renvoie en général un TRUE pour confirmer la valeur proposée, ou un FALSE dans le cas inverse. Quoi de plus simple ?
kzo_logger () est, comme son homologue système 'logger'
présent sous certaines versions dUnix, une simple interface avec
le module syslog, en charge de noter les évènements de
votre système.
kzo_logger () permet denvoyer un message au système qui
héberge votre site WEB à partir dun 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, denvoyer sur la console de votre serveur
les messages importants, dalerter le responsable de la machine lors dune
situation critique.
Les fonctions associées à syslog sont disponibles en PHP depuis sa version 3.0.
Installation
- Créez le répertoire
lib/à la racine de votre serveur WEB (DocumentRoot). - Installez linclude de la libraire dans ce répertoire.
- Définissez les paramètres de votre fichier
/etc/syslog.confpuis relancez syslogd (oukill -HUP)
Le résultat dépend de votre OS, en général, une
ligne du style (dans /etc/syslog.conf) :
*.* /var/log/all.logaura pour effet denvoyer tous les résultats de sylog dans le fichier
/var/log/all.log. Cest 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.logpour envoyer dans /var/log/myapp.log tous les messages de lapplication
« myapp » (on verra ci-dessous comment nommer lapplication).
Attention, tous les Unix noffrent pas la possibilité de trier à
la volée les messages "système". Il faudra parfois user
dun 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 :
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.
Exemple
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. Quallez-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, lheure, 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 ladresse 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 celui 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 DEBUGA noter
%mpermet 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.
|
@author
Christian Paulus
@version
1.0, 27/11/2001
@param
$message Message to send
@param
$priority (see OS manual, 'man syslog' or 'man logger' if available)
@param
$tag (see OS manual, 'man syslog' or 'man logger' if available)
@return
TRUE if OK. FALSE otherwise
@since
PHP3
|


