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:

  1. il faut importer les classes suivantes:

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;


  1. il faut disposer d'un objet Log:

    private static final Log log = LogFactory.getLog(CustomerDao.class);

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



Voir un tutoriel détaillé ici

notre fichier log4j.properties