08/08/2008
Log4j: Logging pour Java
Log4J est une API JAVA (bibliothèque logicielle) qui permet de créer et de stocker des messages, pendant l'exécution du code. Cet outil très apprécié des developpeurs JAVA, offre la possibilité de paramétrer finement l'émission des messages. Ainsi, Log4j permet de choisir la sortie du flot des messages (console, fichier texte..), mais également le niveau d'information donné (info, warn, debug..).
L'archive jar de la bibliothèque Log4J est téléchargeable ICI.
Pour pouvoir être utilisée, la bibliothèque associée à Log4j doit être placée dans le classpath du projet JAVA développé. C'est à dire, soit dans le répertoire 'lib' du projet, soit dans le répertoire 'lib' du serveur (si exécution sur un serveur).
Le comportement de Log4J est précisé dans un fichier de configuration. Deux formats sont disponibles, 'log4j.properties' contient des couples clef/valeur, ou 'log4j.xml' au format xml. Le format xml est préférable car il permet un contrôle plus fin du paramétrage, dont par exemple l'usage de filtres.
Le fichier de configuration de Log4j permet d'indiquer des 'appenders', des 'loggers', et des 'layouts'.
Un 'appender' est le moyen utilisé pour afficher les messages. Autrement dit, un 'appender' est une sortie. Les 'appenders' courants sont la console (ex: la console du serveur Tomcat), ou un fichier texte. Mais, on peut également rediriger les messages vers une base de données. Ainsi, si on veut utiliser la console pour afficher les messages émis par Log4j, la classe 'org.apache.log4j.ConsoleAppender' sera utilisée. Si on souhaite que les messages soient redirigés vers un fichier texte, on pourra se servir de la classe 'org.apache.log4j.RollingFileAppender'. Techniquement, 'appender' est l'interface 'org.apache.log4j.Appender'. Les classes qui définissent les appenders (console, file..) implémentent toutes l'interface 'Appender'.
Le 'logger' est l'objet qui effectue la journalisation. Le niveau minimum des messages émis est défini par le logger. Il peut être: all, no, debug, info, warn, error, fatal. L'appel pour créer un nouveau log se fait par l'usage de la classe 'Logger':
import org.apache.log4j.Logger;
public class uneClasse {
private Logger log = Logger.getLogger(uneClasse.class);
log.info("+ Test de logging +");
}
Le 'layout' définit la présentation utilisée par log4j pour l'écriture des messages. Il existe des layouts prédéfinis comme 'org.apache.log4j.SimpleLayout', ou configurables 'org.apache.log4j.PatternLayout'.
Exemple de fichier de configuration 'log4j.xml' complet:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout"></layout>
</appender>
<appender name="fichier" class="org.apache.log4j.RollingFileAppender">
<param name="maxFileSize" value="100KB"/>
<param name="File" value="../webapps/monProjet/log.txt"/>
<param name="threshold" value="warn"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}: message => %m%n" />
</layout>
</appender>
<root>
<priority value="debug"/>
<appender-ref ref="console"/>
<appender-ref ref="fichier"/>
</root>
</log4j:configuration> L'exemple va créer une sortie sur la console avec un niveau 'debug', et une sortie dans un fichier du répertoire du projet, avec un niveau 'warn'.
Quelques remarques concernant l'exemple ci-dessus:
- Le fichier 'log4j.xml' doit être placé dans le ClassPath de l'application, 'WEB-INF/classes' par exemple
- Le chemin vers le fichier de log peut être défini de manière relative. La racine du chemin est alors le répertoire d'exécution du serveur (si exécution sur un serveur). Le répertoire 'bin' pour un serveur tomcat.
- Le logger racine est contenu par la balise 'root'
- Le niveau de journalisation de log4j peut être défini de manière globale pour tous les appenders associés à un logger. C'est le rôle de la balise <priority> qui est incluse dans la balise <root>
- Le niveau de journalisation peut aussi être redéfini au niveau de chaque appender, avec le paramètre 'threshold' de la balise <param>
- Les conventions pour créer un PatternLayout sont visibles dans la doc de l'API: PatternLayout
Vos commentaires sont bienvenus !
Références:
- Tutoriel Log4j sur Developpez.com: http://beuss.developpez.com/tutoriels/java/jakarta/log4j/
- Cours sur Log4j par Labo-Sun: http://www.labo-sun.com/resource-FR-articles-612-0-java-g...
- Tutoriel Log4J avec exemples Tomcat, par Laliluna: http://www.laliluna.de/log4j-tutorial.html
- Encore un bon tutoriel Log4j: http://www.vipan.com/htdocs/log4jhelp.html
Auteur: Euan MATEO
12:00 Publié dans JAVA | Lien permanent | Commentaires (0) | Envoyer cette note | Tags : log4j, logging, java, api, apache, appender, logger