MyShop: Mise en place du système de log
Par François Pfister, vendredi 7 avril 2006 à 00:13 :: Cours et TP Java 3a 2006 :: #33 :: rss
Le logging est important dans toutes les applications pour faciliter le débogage lors du développement et conserver une trace de son exécution lors de l'exploitation.
Une API très répandue est celle développée par le projet open source Log4j du groupe Jakarta.
Log4j est paramétré par un fichier de propriétés log4j.properties qui doit être dans le classpath du projet. Cela permet de modifier les niveaux de log sans intervenir sur le code applicatif.
Les messages de log peuvent être envoyés dans un fichier, sur la console, une connexion réseau, un canal JMS, etc..
Log4j gére des priorités pour permettre à la catégorie de déterminer si le message sera envoyé dans le fichier de log. Il existe cinq priorités qui possèdent un ordre hiérarchique croissant :
DEBUG
INFO
WARN
ERROR
FATAL
En phase de débogage, rootCategory est réglé sur INFO ou DEBUG, mais en production, il le sera sur WARN ou DEBUG. La sortie sera la console en phase de mise au point, alors que, pour la phase d'exploitation, ce sera généralement un fichier.
Mise en oeuvre dans notre projet:
Pour paramétrer une sortie du log sur la console:
log4j.rootCategory=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
Pour formatter le log:
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] (%F:%L) %-5p %c %x - %m%n
Pour paramétrer le niveau de log pour chacune des classes:
log4j.logger.app.dao.jdbc.CustomerDao=WARN
log4j.logger.app.dao.jdbc.ProductDao=INFO
log4j.logger.app.dao.jdbc.OrderItemDao=DEBUG
Dans cette situation (rootCategory=INFO), CustomerDao ne produira pas de log, alors que ProductDao et OrderItemDao le feront.
Le log sort sur la console (rootCategory=INFO, stdout).
Pour logger un message dans une classe:
il faut importer les classes suivantes:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
il faut disposer d'un objet Log:
private static final Log log = LogFactory.getLog(CustomerDao.class);
il faut générer le message:
log.error("attach failed", re);
log.debug(request);
La sortie des messages est formatée par le pattern défini dans les propriétés:
%-4r [%t] (%F:%L) %-5p %c %x - %m%n
938 [main] (OrderItemTest.java:66) DEBUG OrderItemTest - delete Patati ok
1000 [main] (OrderItemTest.java:66) DEBUG OrderItemTest - delete Ding ok
1063 [main] (OrderItemTest.java:66) DEBUG OrderItemTest - delete Bing ok
Les formatteurs sont les suivants:
%c |
la catégorie |
%C |
la classe qui a émis le message |
%d |
le timestamp |
%m |
le message |
%n |
un retour chariot |
%p |
la priorité |
%r |
le timestamp |
%t |
le thread |
%x |
NDC du thread |
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.