[Java] Log5j: Log4j à la sauce Java 5

Si vous utilisez Log4j dans vos projets, et si en plus vous êtes sur Java >= 5, alors log5j devrait vous intéresser.
C’est un tout petit projet hébergé dans Google Code et qui se contente de présenter une interface moderne à Log4j, en utilisant les varargs mais surtout java.util.Formatter, le tout pour éviter l’erreur très répandue que voici:

log.debug("Nom="+nom+", prenom="+prenom);

[Suite:]

On sait tous que la charge induite lors de la vérification du niveau de log est très réduite pour Log4j, mais c’est pas le cas tout le temps, et certainement pas avec un tas d’instructions comme celle au dessus.

En effet, quelque soit le niveau de log défini (disons info par exemple), cette instruction va induire une charge qui est la génération de la chaine passée au logger, ce qui peut être très couteux avec des milliers d’occurences décimées disséminées le long du code.

La bonne manière de procéder serait de vérifier d’abord si le logger est en mode debug avant d’appeler la méthode debug, mais ceci peut vite devenir pénible et casse gueule: on décide de changer le debug en warn sans toutefos changer le test du if xD, etc.

Log5j offre une solution élégante à ce problème, en surchargant les 5 méthodes de log de log4j (debug, info, warn, error, fatal) avec des méthode acceptant un paramètre format et un varargs, ce qui donne:

log.debug("Nom=%s, prenom=%s", nom, prenom);

Log5j s’occupe ensuite de tester si on est au bon niveau de log, et si c’est le cas il utilise java.util.Formatter pour générer la chaine résultante et la passer à Log4j.

Enfin, Log5j offre un autre goodie qui est la simplification de la déclaration du logger: Qui n’a jamais mal-usé du copier/coller de la (longue) déclaration d’un Logger en oubliant de changer la classe passée comme paramètre ? ;)
Ainsi, ceci (Log4j)

private static final Logger log = Logger.getLogger(MaClasse.class);

devient (log5j):

private static final Logger log = Logger.getLogger();

Et ce pour un même résultat.

Pour finir, la bête (le jar) ne fait que 3Ko, et est composé d’une seule classe (com.spinn3r.log5j.Logger)

—-

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: