Log4J : journalisation (log) des applications Java

Fiche PLUME
  • Création ou MAJ importante : 12/01/2012
  • Correction mineure : 12/01/2012
  • Auteur : Jean-Michel Glorian - IRAP (CNRS, Université Paul Sabatier)
  • Contributions importantes :

    Cette fiche a été initialement rédigée par Thomas Lallart (DSI-INRA)


  • Responsable thématique : Pascal Dayre (IRIT)
  • Relecteur 1 : Patrice Ringot
  • Relecteur 2 : Pascal Dayre
Mots clés
Description
Fonctionnalités générales

Les bonnes pratiques de développement actuelles déconseillent l'utilisation des méthodes System.out.print* et System.err.print* pour afficher des messages et recommandent plutôt l'utilisation d'un logger tel Log4J apportant plus de souplesse.
Log4J simplifie les gestions des logs et le débogage des applications Java en fournissant des classes et des méthodes pour l'enregistrement de ces informations. Les fichiers journaux d'une application représentent la mémoire d'une application, un historique permanent de la vie de celle-ci, il est donc important de correctement enregistrer ces messages.
Le développeur préférera envoyer le message qu'il souhaite afficher ou enregistrer au logger en lui assignant un certain niveau de criticité (DEBUG, INFO, WARNING, ERROR, CRITICAL) et indiquant la classe/la méthode à l'origine de ce message, la ligne dans le code source, ou toute autre information utile. Grâce à cette couche, on peut facilement demander par exemple à une application d'afficher tous les messages de niveau DEBUG et supérieur à l'écran lors de la phase de développement puis lui demander de n'afficher que les messages de niveau WARNING et supérieur dans un fichier de log en phase de production.
Ces différents types d'affichage des messages peuvent être configurés facilement au runtime de log4j par fichier XML ou par fichier de propriétés, donc de façon totalement externe au code.
Log4J est constitué de 3 composants principaux qui permettent de configurer le dispositif de journalisation : les Loggers pour les écrire les messages, les Appenders pour sélectionner la destination des messages et les Layouts pour la mise en forme des messages.
Log4J permet donc non seulement de gagner en flexibilité sur la gestion des messages d'une application mais également de faciliter la recherche et la détection d'erreur.

Autres fonctionnalités
  • Les messages peuvent être enregistrés de différentes façons : dans une base de données, dans un fichier plat ou XML, vers une socket, vers une file JMS, vers un serveur SMTP,... La sortie vers un fichier XML associée à un outil de lecture adéquat permet une recherche simplifiée des messages.
  • Log4J permet également de remonter les messages d'erreurs de certains logiciels avec lesquels il s'interface. C'est notamment le cas de Tomcat. On peut alors récupérer les messages de Tomcat dès le niveau DEBUG.
  • Log4J permet de gérer finement la rotation des fichiers de logs en production. Plutôt qu'un fichier de log unique dont la taille va rapidement grossir et le rendre inexploitable, on peut faire en sorte que Log4J archive plusieurs fichiers de logs selon différents critères (1 par jour, par semaine, nouveau fichier lorsque le fichier courant atteint une taille donnée,...).
Interopérabilité

Une version de log4j 1.3 alpha releases a été sortie mais elle pose des problèmes de compatibilité avec la version 1.2 et sa maintenance a été abandonnée. Il est fortement conseillé d'utiliser la version 1.2

Contexte d'utilisation dans mon laboratoire/service

Log4J est utilisé pour gérer les fichiers journaux de la plupart de nos applications Java.

Limitations, difficultés, fonctionnalités importantes non couvertes

Log4J a nécessairement des impacts sur les performances de l'application. Cependant, si le logger est configuré judicieusement (éviter l'affichage de messages dans des boucles par exemple), ceux-ci sont généralement négligeables.
La profusion de messages dans le fichier de log et/ou une mauvaise configuration peuvent impliquer un accroissement important de la taille des fichiers de logs aboutissant même à stopper la production d'un applicatif (par exemple si le log et les données sont sur le même file system).

Environnement du logiciel
Logiciels connexes
  • Chainsaw : outil de visualisation des logs basé sur Swing intégré à Log4J depuis la version 1.2.
  • API commons.logging : permet de journaliser une application indépendamment de la librairie qui gérera la journalisation effective.
  • Just4Log : permet d'améliorer les performances des API de journalisation Java.
Autres logiciels aux fonctionnalités équivalentes
  • Dans le monde Java, le JDK intègre depuis la version 1.4, sa propre API de journalisation : java.util.logging.
    Des bibliothèques de journalisation équivalentes (souvent basées sur Log4J) existent également pour d'autres langages dont .NET, C, C++, PHP,... Une liste des outils de journalisation est disponible notamment à l'adresse http://en.wikipedia.org/wiki/Log4J#Ports.
  • Logback : un autre logiciel dans la lignée de log4j
    Il est développé entre autres par l'un des auteurs de log4j, et est disponible sous licence LGPL 2.1
Environnement de développement
Type de structure associée au développement

Fondation Apache.

Eléments de pérennité

La fondation Apache fait parti des communautés Open Source majeures.

Références d'utilisateurs institutionnels

LAAS, AgroClim, CESR à Toulouse,

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums
Documentation utilisateur
Contributions

Elles peuvent se faire sur le modèle proposé par Apache :
http://www.apache.org/foundation/contributing.html
Une liste de discussion est réservée aux développeurs de Log4J :
http://mail-archives.apache.org/mod_mbox/logging-l...