Você está na página 1de 5

Introduction Introduction

Les composants Les composants

Log4j

Les Framework Java


Log4j
1 Introduction

Claude Duvallet 2 Les composants

Universit du Havre
UFR Sciences et Techniques
25 rue Philippe Lebon - BP 540
76058 LE HAVRE CEDEX
Claude.Duvallet@gmail.com
http://litis.univ-lehavre.fr/duvallet/

Claude Duvallet 1/19 Framework Claude Duvallet 2/19 Framework

Introduction Introduction
Les composants Les composants

Log4j : prsentation (1/3) Log4j : prsentation (2/3)

Les bonnes pratiques de dveloppement dconseillent lutilisation


des mthodes System.out.print* et System.err.print* On indiquera aussi la classe/la mthode lorigine de ce
pour afficher des messages et recommandent plutt lutilisation message, la ligne dans le code source, ou toute autre information
dun logger tel Log4J apportant plus de souplesse. utile.
Log4J simplifie les gestions des logs et le dbogage des On peut facilement demander une application dafficher tous les
applications Java en fournissant des classes et des mthodes messages de niveau DEBUG et suprieur lcran lors de la
pour lenregistrement de ces informations. phase de dveloppement.
Les fichiers journaux dune application reprsentent la mmoire Puis on peut lui demander de nafficher que les messages de
dune application, un historique permanent de la vie de celle-ci, il niveau WARNING et suprieur dans un fichier de log en phase
est donc important de correctement enregistrer ces messages. de production.
Le dveloppeur prfrera envoyer le message quil souhaite Ces diffrents types daffichage des messages peuvent tre
afficher ou enregistrer au logger en lui assignant un certain configurs facilement au runtime de log4j par fichier XML ou par
niveau de criticit (DEBUG, INFO, WARNING, ERROR, fichier de proprits, donc de faon totalement externe au code.
CRITICAL).

Claude Duvallet 3/19 Framework Claude Duvallet 4/19 Framework


Introduction Introduction
Les composants Les composants

Log4j : prsentation (3/3) Le framework Log4j : origines

Log4J est constitu de 3 composants principaux qui permettent


Cest une partie du projet Jakarta, sous-projet dApache.
de configurer le dispositif de journalisation :
les Loggers pour crire les messages, Il est distribu en Open Source sous Licence BSD.
les Appenders pour slectionner la destination des messages Les premires versions sont apparue en 1996.
et les Layouts pour la mise en forme des messages.
La documentation officielle est disponible cette adresse :
Log4J permet donc non seulement de gagner en flexibilit sur la http://jakarta.apache.org/log4j/docs/index.html.
gestion des messages dune application mais galement de
La version actuelle est 1.2.
faciliter la recherche et la dtection derreurs.

Claude Duvallet 5/19 Framework Claude Duvallet 6/19 Framework

Introduction Introduction
Les composants Les composants

La classe Logger Les niveaux de journalisation (1/3)

La notion de niveau de journalisation ou de priorit dun message


Le Logger est lentit de base pour effectuer la journalisation, il reprsente limportance du message journaliser.
est mis en uvre par le biais de la classe Elle est reprsente par la classe org.apache.log4j.Level.
org.apache.log4j.Logger. Un message nest journalis que si sa priorit est suprieure ou
Lobtention dune instance de Logger se fait en appelant la gale la priorit du Logger effectuant la journalisation.
mthode statique Logger.getLogger : LAPI Log4j dfinit 5 niveaux de logging prsents ici par gravit
import org.apache.log4j.Logger; dcroissante :
public class MaClasse {
private static final Logger logger = Logger.getLogger(MaClasse.class); FATAL : journaliser une erreur grave pouvant mener larrt
// suite
} prmatur de lapplication.
ERROR : journaliser une erreur qui nempche cependant pas
Il est possible de donner un nom arbitraire au Logger. lapplication de fonctionner.
Cependant, il est prfrable dutiliser le nom de la classe pour WARN : journaliser un avertissement, il peut sagir par exemple
dune incohrence dans la configuration.
des raisons de facilit.
INFO : journaliser des messages caractre informatif.
DEBUG : gnrer des messages pouvant tre utiles au dbogage.

Claude Duvallet 7/19 Framework Claude Duvallet 8/19 Framework


Introduction Introduction
Les composants Les composants

Les niveaux de journalisation (2/3) Les niveaux de journalisation (3/3)

Deux niveaux particuliers, OFF et ALL sont utiliss des fins de Pour les niveaux de base, des mthodes de raccourcis sont
fournies, elle portent le nom du niveau :
configuration.
try {
La version 1.3 introduira le niveau TRACE qui reprsente le // quivaut logger.info("Message dinformation");
logger.log(Level.INFO, "Message dinformation");
niveau le plus fin (utilis par exemple pour journaliser lentre ou // Code pouvant soulever une Exception
//...
la sortie dune mthode). } catch(UneException e) {
// quivaut logger.log(Level.FATAL, "Une exception est survenue", e);
Plus on descend dans les niveaux, plus les messages sont logger.fatal("Une exception est survenue", e);
}
nombreux.
Il est possible deffectuer une journalisation avec des messages
Si vous avez besoin de niveaux supplmentaires, vous pouvez
localiss au moyen des mthodes l7dlog(Priority, String
crer les vtres en sous-classant org.apache.log4j.Level. cle, [Object[], ] Throwable).
La journalisation dun message un niveau donn se fait au cle correspond lidentifiant du message dans le
moyen de la mthode log(Priority, String). ResourceBundle positionn via la mthode
Il existe diverses variantes permettant par exemple de passer un setResourceBundle.
Notez que pour ces mthodes, il nexiste pas de raccourci.
Throwable dont la trace sera enregistre.

Claude Duvallet 9/19 Framework Claude Duvallet 10/19 Framework

Introduction Introduction
Les composants Les composants

Linterface Appender (1/3) Linterface Appender (2/3)


Bien que vous ne devriez pas avoir manipuler les Appenders
Suite des Appenders :
directement en Java, il est ncessaire de connatre leur
org.apache.log4j.lf5.LF5Appender : Journalise les
fonctionnement afin de configurer correctement Log4j.
vnements vers une console base sur Swing, celle-ci permet
Les Appenders, reprsents par linterface de trier ou de filtrer les vnements ;
org.apache.log4j.Appender, sont le moyen utilis par log4j org.apache.log4j.varia.NullAppender : Neffectue aucune
pour enregistrer les vnements de journalisation. journalisation ;
org.apache.log4j.net.SMTPAppender : Envoie un email
Chaque Appender a une faon spcifique denregistrer ces
lorsque certains vnements surviennent ( ne pas activer avec
vnements. un niveau de journalisation DEBUG...) ;
Log4j vient avec une srie dAppenders quil est utile de dcrire, org.apache.log4j.net.SocketAppender : Envoie les
puisquils seront repris dans la configuration : vnements de journalisation vers un serveur de journalisation ;
org.apache.log4j.jdbc.JDBCAppender : Effectue la org.apache.log4j.net.SyslogAppender : Journalise les
journalisation vers une base de donnes ; vnements vers un daemon Syslog (distant ou non) ;
org.apache.log4j.net.JMSAppender : Utilise JMS pour org.apache.log4j.net.TelnetAppender : Journalise les
journaliser les vnements ; vnements vers un socket auquel on peut se connecter via
org.apache.log4j.nt.NTEventLogAppender : Journalise via telnet ;
le journal des vnements de Windows (NT/2000/XP) ;

Claude Duvallet 11/19 Framework Claude Duvallet 12/19 Framework


Introduction Introduction
Les composants Les composants

Linterface Appender (3/3) Cibles des messages (1/3)

Fin des Appenders :


org.apache.log4j.ConsoleAppender : Effectue la
Un appender reprsente donc la cible dun message, cest--dire
journalisation vers la console ;
org.apache.log4j.FileAppender : Journalise dans un fichier ; lendroit o celui-ci sera physiquement affich ou stock.
org.apache.log4j.DailyRollingFileAppender : Journalise log4j vous propose ainsi des appenders pour la console, les
dans un fichier qui tourne rgulirement (contrairement ce que fichiers, les sockets, le gestionnaire dvnements Windows NT,
son nom suggre, ce nest pas forcment tous les jours) ; le dmon Unix syslog ou encore les composants graphiques.
org.apache.log4j.RollingFileAppender : Journalise dans
un fichier, celui-ci est renomm lorsquil atteint une certaine taille
Chaque logger dispose de la mthode addAppender()
et la journalisation reprend dans un nouveau fichier. permettant de lui affecter une nouvelle cible.
Les paramtres ncessaires certains de ces Appenders sont La hirarchie des loggers joue un rle trs important.
dtaills dans la partie configuration. En effet, chaque message de journalisation sera transmis aux
Notez cependant quil est possible daffecter un niveau seuil cibles du logger courant ainsi quaux cibles de tous ses parents.
(threshold) tous les Appenders tendant la classe
org.apache.log4j.AppenderSkeleton.

Claude Duvallet 13/19 Framework Claude Duvallet 14/19 Framework

Introduction Introduction
Les composants Les composants

Cibles des messages (2/3) Cibles des messages (3/3)

En affectant par exemple une cible console au logger racine et


une cible fichier au logger org.test aura les consquences
suivantes : Dans lexemple prcdent, les loggers org et org.test utilisent
les messages du logger org seront affichs en console. une cible de type fichier.
et les messages de org.progx (et de tous ses enfants) seront Aucun dentre eux ne pourra bnficier de la cible console
affichs en console et enregistrs dans un fichier.
affecte la racine.
Vous pouvez nanmoins prvenir ce fonctionnement en Et si les diffrentes cibles offertes par log4j ne vous suffisent pas,
excutant setAdditivity(false) sur le logger concern.
vous pourrez en crer de nouvelles trs facilement.
Attention, toutefois car ceci brisera la chane de dlgation des
appenders : Pouvoir personnaliser la destination des messages ne donne
Logger.getRootLogger().addAppender(new ConsoleAppender()); absolument aucune indication sur leur format.
Logger log1 = Logger.getLogger("org");
log1.setAdditivity(false);
log1.addAppender(new FileAppender(new SimpleLayout(), "test.log"));
Logger log2 = Logger.getLogger("org.test");

Claude Duvallet 15/19 Framework Claude Duvallet 16/19 Framework


Introduction Introduction
Les composants Les composants

Les Layouts Les Layouts


Les Layouts fournis par log4j sont les suivants, lexistance du
PatternLayout permet de formatter les vnements d peu prs
nimporte quelle faon :
org.apache.log4j.SimpleLayout : Comme son nom lindique, il
Les Layouts sont utiliss pour mettre en forme les diffrents sagit du Layoutle plus simple, les vnements journaliss ont le
vnements de journalisation avant quils ne soient enregistrs. format Niveau - Message[Retour la ligne] ;
org.apache.log4j.PatternLayout : Layout le plus flexible, le format
Ils sont utiliss en conjugaison avec les Appenders.
du message est spcifi par un motif (pattern) compos de texte
Bien que tous les Appenders acceptent un Layout, ils ne sont pas et de squences dchappement indiquant les informations
forcs de lutiliser (les Appenders utilisant un Layout sont afficher.
reprables au fait que leur mthode requiresLayout renvoie true). org.apache.log4j.XMLLayout : Comme son nom lindique, formate
les donnes de lvnement de journalisation en XML ( utiliser en
conjugaison avec un Appender de la famille des FileAppenders) ;
org.apache.log4j.HTMLLayout : Les vnements sont journaliss
au format HTML. Chaque nouvelle session de journalisation
(rinitialisation de Log4j) donne lieu un document HTML
complet (ie. prambule DOCTYPE, <html>, etc).

Claude Duvallet 17/19 Framework Claude Duvallet 18/19 Framework

Introduction
Les composants

Format des messages

Le plus intressant est indubitablement PatternLayout dont la


souplesse saura combler toutes vos exigences :
Logger log = Logger.getLogger("org.test");
PatternLayout layout = new PatternLayout("\%d \%-5p \%c - \%F:\%L - \%m\%n");
ConsoleAppender stdout = new ConsoleAppender(layout);
log.addAppender(stdout);
Le format dfini dans cet exemple affiche lheure et la date, le
niveau derreur (align gauche), le nom du logger, le nom du
fichier, le numro de la ligne de code correspondante et enfin le
message lui-mme.
Le rsultat apparatra ainsi dans votre console :
2003-44-29 04:44:32,211 DEBUG org.test - exemple3.java:18 - Starting
2003-44-29 04:44:32,221 DEBUG org.test - exemple3.java:20 - Exiting

Claude Duvallet 19/19 Framework

Você também pode gostar