Log4perl
Log4perl est un projet open source qui est une implémentation en Perl du paquetage Log4j. Il permet de gérer proprement la journalisation des actions effectuées via Perl.
Les utilisateurs ayant dĂ©jĂ utilisĂ© des systĂšmes de journalisation sont familiers avec la notion de niveau de journalisation ou de prioritĂ© d'un message. Il s'agit d'une entitĂ© reprĂ©sentant l'importance du message Ă journaliser (FATAL, ERROR, WARN, INFO et DEBUG). Log4perl se base sur un mĂ©canisme trĂšs puissant et flexible. Il permet de lancer ou arrĂȘter les Logs Ă tout moment, il suffit dâindiquer le niveau du dĂ©tail et le relier au sous-systĂšme qui est actuellement exĂ©cutĂ©.
Log::Log4perl est différent des systÚmes de journalisation traditionnel comme le debug, Il permet de commander le nombre des Logs produits en trois niveaux différents :
- Ă un endroit central dans votre systĂšme (dans un fichier de configuration ou dans le code de dĂ©marrage) ou vous indiquez lâĂ©lĂ©ment (classes, fonctions) qui devrait gĂ©nĂ©rer les Logs.
- Le niveau de Log de lâĂ©lĂ©ment.
- Lâappender Ă alimenter pour les Logs (Ă©cran, fichier de Logs, courriel âŠ), ainsi que le format dâaffichage des messages des Logs.
Objet du document
Ce document est un résumé des spécifications de log4perl. C'est un « document vivant », soutenu au fur et à mesure que de nouvelles versions de log4perl voient le jour.
Bien que nous sachions qu'elles seront lĂ©gĂšrement dĂ©passĂ©es au moment oĂč vous lirez ce document, nous avons inclus ces spĂ©cifications de dĂ©veloppement car il s'agit d'une source de rĂ©fĂ©rence et que nous pensons que ce document serait incomplet sans elles. vous pouvez consulter la documentation en ligne de la version de log4perl que vous avez installĂ©e.
Syntaxe
# Easy mode : simple ...
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($ERROR);
DEBUG "This doesn't go anywhere";
ERROR "This gets logged";
# ... or standard mode for more features:
Log::Log4perl::init('/etc/log4perl.conf');
--or--
# Check config every 10 secs
Log::Log4perl::init_and_watch('/etc/log4perl.conf',10);
--then--
$logger =Log::Log4perl->get_logger('house.bedrm.desk.topdrwr');
$logger->debug('debug message');
$logger->info('info message');
$logger->warn('etc');
$logger->error('..');
$logger->fatal('..');
#####/etc/log4perl.conf###############################
log4perl.logger.house = WARN, FileAppndr1
log4perl.logger.house.bedroom.desk = DEBUG, FileAppndr1
log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
log4perl.appender.FileAppndr1.filename = desk.log
log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
###################################################### =head1 ABSTRACT Log::Log4perl provides a powerful logging API for your application
Obtenir de l'aide
Si vous avez des questions sur Log4perl, vous pouvez obtenir de l'aide sur la liste de diffusion log4perl-devel@lists.sourceforge.net .
Il est Ă©galement judicieux de consulter la page de documentation de Log4perl Ă : http://log4perl.sourceforge.net/releases/Log-Log4perl/docs/html/Log/Log4perl.html Avant de poser une question, quelle qu'elle soit, relisez ce document, consultez les archives et lisez la FAQ de Log4perl.
Notations et conventions
Les conventions suivantes s'appliquent Ă ce document : $log Objet descripteur du logger.
Principe d'utilisation
Chargement du module
Pour utiliser Log4perl, il faut d'abord charger le module Log::Log4perl: use Log::Log4perl;
Fichier de Configuration
Puis, vous pouvez instancier le Logger en utilisant des commandes perl ou par un fichier de configuration. Le fichier de configuration peut ressembler Ă :
# Un simple logger avec Log::Log4perl::Appender::File # Fichier appender en Perl log4perl.logger= ERROR, fichier_log
# paramétrage de l'appender "logger_batch" : log4perl.appender.fichier_log=Log::Log4perl::Appender::File log4perl.appender.fichier_log.filename=/usr2/projets/tmp/ins/ins.log log4perl.appender.fichier_log.mode=append log4perl.appender.fichier_log.max=5 log4perl.appender.fichier_log.layout=Log::Log4perl::Layout::PatternLayout log4perl.appender.fichier_log.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %P %-5p> %F{1}:%L %M - %m%n
Ces lignes permettent de définir un standard logger qui journalise les erreurs dans le fichier inscription.properties en utilisant le format : Date heure:minute:seconde, milliseconde pid du processus niveau du message de log> nom du fichier source:numéro de la ligne classe fonction - message (retour ligne).
Exemple :
2007-01-03 18:10:53,854 part-dev INFO > IAMGEN_Utilitaires.pm:140 IAMGEN::log_comment â message
Initialisation du logger
En supposant que le fichier de configuration se trouve sous inscription.properties, vous pouvez le lire au dĂ©but de code perl en utilisant : Log::Log4perlâinit("inscription.properties");
Utilisation du logger
AprĂšs que lâinitilisation soit faite quelque part dans le code, vous pouvez utiliser les objets loggers dans le code. Noter qu'il n'y a aucun besoin de ne porter aucune rĂ©fĂ©rence du logger autour avec vos fonctions et mĂ©thodes. Vous pouvez obtenir un logger n'importe quand par l'intermĂ©diaire d'un mĂ©canisme de singleton, il suffit de faire appel Ă la mĂ©thode static du logger get_logger($category) pour obtenir une et une seule rĂ©fĂ©rence du logger avec une certaine catĂ©gorie.
Exemple:
package My::MegaPackage; use Log::Log4perl; sub some_method { my($param) = @_; my $log = Log::Log4perlâget_logger("My::MegaPackage"); $logâdebug("Debug message"); $logâinfo("Info message"); $logâwarn("Warning message"); $logâerror("Error message"); ... }
En se fondant sur le fichier de configuration prĂ©sentĂ© prĂ©cĂ©demment, Log::Log4perl affichera que âError messageâ dans le fichier log spĂ©cifiĂ© /usr2/projets/tmp/ins/ins.log car le niveau des log a Ă©tĂ© initialisĂ© Ă Error dans le fichier de configuration.
Niveau de journalisation
Le niveau de journalisation ou de priorité d'un message se base d'une entité représentant l'importance du message à journaliser, elle est représentée par la classe org.apache.log4j.Level. Un message n'est journalisé que si sa priorité est supérieure ou égale à la priorité du Logger effectuant la journalisation. Log4j définit 5 niveaux de logging présentés ici par gravité décroissante.
- FATAL
- UtilisĂ© pour journaliser une erreur grave pouvant mener Ă l'arrĂȘt prĂ©maturĂ© de l'application.
- ERROR
- UtilisĂ© pour journaliser une erreur qui n'empĂȘche cependant pas l'application de fonctionner.
- WARN
- Utilisé pour journaliser un avertissement, il peut s'agir par exemple d'une incohérence dans la configuration, l'application peut continuer à fonctionner mais pas forcément de la façon attendue.
- INFO
- Utilisé pour journaliser des messages à caractÚre informatif (nom des fichiers, etc.).
- DEBUG
- UtilisĂ© pour gĂ©nĂ©rer des messages pouvant ĂȘtre utiles au dĂ©bogage.
Si vous configurez un systÚme de journalisation avec un niveau warning alors tous les messages journalisés avec info() et debug() seront ignorés alors que fatal(), error() et warn() vont passer car leur priorité est supérieure ou égale au niveau configuré
Voir aussi syslog#Niveau de gravité.
Appenders
Afin de mieux les manipuler, il est nécessaire de connaßtre le fonctionnement des Appenders et de configurer correctement Log4perl. Log::Log4perl ne définit aucun Appender par défaut. Les Appenders sont le moyen utilisé par log4perl pour enregistrer les événements de journalisation. Chaque Appender a une façon spécifique d'enregistrer ces événements. Les paramÚtres nécessaires à certains des Appenders sont détaillés dans la partie configuration. Cependant, il est possible d'affecter un niveau seuil (threshold) à tous les Appenders (ce qui est le cas de tous les Appenders fournis avec log4perl). Dans ce cas, un message n'est journalisé par un Appender donné que si son niveau est supérieur ou égal à celui du Logger et qu'il est supérieur ou égal au seuil de l'Appender considéré.
Log::Log4perl
- Log::Log4perl vient avec une série d'Appenders qu'il est utile de décrire, puisqu'ils seront repris dans la configuration :
- Log::Log4perl::Appender::Screen â Effectue la journalisation vers la console ;
- Log::Log4perl::Appender::ScreenColoredLevels
- Log::Log4perl::Appender::File â Journalise dans un fichier ;
- Log::Log4perl::Appender::Socket â Envoie les Ă©vĂ©nements de journalisation vers un serveur de journalisation
- Log::Log4perl::Appender::DBI â Effectue la journalisation vers une base de donnĂ©es ;
- Log::Log4perl::Appender::Synchronized
- Log::Log4perl::Appender::RRDs
CPAN
Vous pouvez trouver dans CPAN dâautres Appenders comme
- Log::Log4perl::Layout::XMLLayout
- Log::Dispatch
- Log4perl utilise lâexcellent framework de Dave Rolskys Log::Dispatch qui implĂ©mente une variĂ©tĂ© dâAppenders :
- Log::Dispatch::ApacheLog
- Log::Dispatch::DBI
- Log::Dispatch::Email,
- Log::Dispatch::Email::MailSend,
- Log::Dispatch::Email::MailSendmail,
- Log::Dispatch::Email::MIMELite
- Log::Dispatch::File
- Log::Dispatch::FileRotate
- Log::Dispatch::Handle
- Log::Dispatch::Screen
- Log::Dispatch::Syslog
- Log::Dispatch::Tk
Configuration directe des Appenders dans le code
En supposant que vous vouliez afficher des messages de Logs info ou dâune prioritĂ© supĂ©rieure pour une catĂ©gorie donnĂ©e (Toto::Test) dans lâĂ©cran et dans un fichier de configuration (test.log). Vous pouvez dĂ©finir deux Appenders au dĂ©but de votre code en vous basant sur les deux modules (Log::Log4perl::Appender::File et Log::Log4perl::Appender::Screen) :
use Log::Log4perl; # Configuration my $conf = q( log4perl.category.Toto.Test = INFO, Logfile, Screen log4perl.appender.Logfile = Log::Log4perl::Appender::File log4perl.appender.Logfile.filename = test.log log4perl.appender.Logfile.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.Logfile.layout.ConversionPattern = [%r] %F %L %m%n log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout );
# Initialisation du Logger en passant la référence Log::Log4perl::init( \$conf);
Formats des messages
Lorsque les messages de journalisation sont rĂ©cupĂ©rĂ©s par lâAppender dans le systĂšme de journalisation. Un format de prĂ©sentation des messages est dĂ©fini, on y trouve des donnĂ©es intĂ©ressantes comme la date, lâheure, le pid du processus niveau du message de log> nom du fichier ...
Comme pour Log4j, Log4perl fournit principalement deux Layouts pour mettre en forme les différents événements de journalisation Log::Log4perl::Layout::SimpleLayout et Log::Log4perl::Layout::PatternLayout
- Log::Log4perl::SimpleLayout : Comme son nom l'indique, il s'agit du Layout le plus simple, les Ă©vĂ©nements journalisĂ©s ont le format niveau â message (Retour Ă la ligne) .
- Log::Log4perl::Layout::PatternLayout : permet de formater les événements d'à peu prÚs n'importe quelle façon, le format du message est spécifié par un motif (pattern) composé de texte et de séquences d'échappement indiquant les informations à afficher.
%c catĂ©gorie dâĂ©vĂ©nement de journalisation. %C Nom complet du package (ou classes) de lâappelant %d Date courante Format in yyyy/MM/dd hh:mm:ss %F Fichier oĂč lâĂ©vĂ©nement de journalisation sâest produit %H Hostname %l Nom complet de la mĂ©thode oĂč lâĂ©vĂ©nement sâest produit, suivi par le nom du fichier source et le numĂ©ro de la ligne entre parenthĂšses %L NumĂ©ro de la ligne ou fichier source oĂč lâĂ©vĂ©nement sâest produit %m Message %M MĂ©thode (ou fonction) oĂč lâĂ©vĂ©nement sâest produit %n retour Ă la ligne %p PrioritĂ© de lâĂ©vĂ©nement %P pid du processus en cours %r Nombre de millisecondes Ă©coulĂ©es entre le dĂ©but du programme et jusquâĂ la production de lâĂ©vĂ©nement %x NDC stack %X{clĂ©} MDC %% signe littĂ©ral de pour cent (%)
Sinon, par défaut, les événements sont journalisés au format message (Retour à la ligne);
- Remarques :
- Le format de la date peut ĂȘtre spĂ©cifique. par exemple %d{HH:mm} permet de nâafficher que les heures et les minutes
- MĂȘme remarque pour les fichiers, par exemple %F {1} permet de nâafficher que le nom de fichier sans le chemin dâaccĂšs
- %c{2} permet de nâafficher que les deux derniĂšres composantes de la catĂ©gorie en cours. par exemple si la catĂ©gorie est Toto::Tata::Titi on aura affichĂ© Tata::Titi
Référence
Voir aussi
Documentation
Livres et revues
- Introduction Ă Perl, 3e Ădition (BrochĂ©) de Randal L. Schwartz, Tom Phoenix
- Perl en action (Broché) de Christiansen