Petit passage rapide sur les loggers du monde Java (lorsque l’on souhaite utiliser une API/librairie dédiée au logging)
Les principaux choix sont :
* JDK logger (via java.util.logging) http://download.oracle.com/java…
* commons logging d’Apache http://commons.apache.org/loggi…
* le fameux log4j http://logging.apache.org/log4j…
* le successeur du précédent : LogBack http://logback.qos.ch/
* une librairie un peut particulière : SLF4J http://slf4j.org/
JDK logger présente l’avantage d’ être natif (pas de dépendances supplémentaire), par défaut il prend la configuration présente dans le JDK (sous jdk1.6.0_23jreliblogging.properties par exemple) donc pas de soucis pour trouver une configuration par défaut. Inconvénient, peu de souplesse dans l’utilisation, surcharge de la configuration par défaut pas spécialement évidente en programmatique (sans passer par un argument VM qui est une possibilité pas toujours appréciée).
Log4j , massivement utilisée. Les développements sont arrêtés donc pas d’évolutions sur les nouveautés. Configuration en properties, xml ou programmatique.
LogBack qui doit prendre la suite de Log4j, développé par le fondateur de Log4j, elle se veut le successeur.
SLF4J est un peu particulier, c’est une facade pour les loggers. On utilise l’API de la facade et au moment du build de l’application on intègre le bundle SLF4J avec l’implementation de son choix (log4j, logBack, noLog, console, commons logging, …).
Quelques problématiques récurrentes aux choix de logs :
* pour son dev, quel logger utiliser
* comment je passe ma configuration de log (programmatique, par spring via org.springframework.util.Log4jConfigurer, via ma servlet, par argument VM avec -Dlog4j.configuration=file ou pour jdk logging -Djava.util.logging.config.file ou -Djava.util.logging.config.class)
* comment je gère mon systeme de log et mes fichiers rapport aux différents environnements
* ma politique de log (1 ou plusieurs fichiers, hierarchie de logger ou non, ….)
* comment je gère les logs de mes dépendances (spring qui log en log4j, une autre lib qui log en jdk logging, …) afin de disposer de toutes les traces nécessaires
* comment j’accède et consomme mes logs
Un dernier petit lien, le blog de Ceki Gulcu qui est le fondateur de log4j
Auteur: Sébastien NORMAND