logo       

"Best practice" pour le log: msg#00026

java.french.general

Subject: "Best practice" pour le log

Bonjour à tous,
Je me pose quelques questions sur la meilleure façon d'utiliser un
système de log.

Premièrement, faut-il déclarer le Logger en static ?
J'ai regardé sur le site de "commons logging" le chapitre "Developing
With JCL" (http://tinyurl.com/bax8f) et le Logger de l'exemple est static :
---http://tinyurl.com/bax8f
public class CLASS{
private static Log log = LogFactory.getLog(CLASS.class);
...
---
Pour l'instant je fais :
private final static Logger log;
...// d'autres membres
static { // initialisation des membres statiques
log = Logger.getLogger(EntityAbstraite.class);
...
}
Qu'en pensez-vous ?
Est-ce que ça peut poser un problème avec un serveur d'applications (et
donc plusieurs thread) ?


Deuxièmement, une mauvaise utilisation peut-elle engendrer une fuite de
mémoire ?
Toujours sur le site de "commons logging" le chapitre "Classloader and
Memory Management" (http://tinyurl.com/ckpjx) recommande l'appel à la
fonction "release" :
---http://tinyurl.com/ckpjx
While this approach [utiliser LogFactory.getLog()] is efficient, it can
lead to memory leaks if container implementors are not careful to call
LogFactory.release()
---
Si je comprend bien le "container implementors" c'est le serveur que
j'utilise. Donc ça serait à lui de faire le "release()" ?
Là j'avoue que je suis un peu largué :)


Troisièmement, comment limitez-vous le coup d'évaluation du paramètre ?
Toujours sur "commons logging" le chapitre "Code Guards"
(http://tinyurl.com/bmphy) recommande l'utilisation de la méthode
"log.is<Priority>()".
Ce qui donne par exemple :
if (logger.isDebugEnabled()) {
logger.debug("message");
}
Pour l'instant je fais ça manuellement au cas par cas mais j'ai
découvert récemment "Just4log" (http://just4log.sourceforge.net/) qui
modifie les .class pour ajouter les if.
Utilisez-vous ce genre d'outil ?
Personnellement, étant donnée que je ne concatène pas directement les
chaînes de caractères avec "+" mon code ressemble plus souvent à ça :
if (logger.isDebugEnabled()) {
unStringBuilder.setLength(0);
unStringBuilder.append("texte ").append(valeur);
...
logger.debug(unStringBuilder.toString());
}
Donc l'interet d'un outil de ce genre est dans mon cas assez limité. De
plus, la documentation de "Just4log" ne précise pas si plusieurs
appelles sont regroupés dans un seule if. Il y a aussi le cas ou le
message est simple et ne nécessite pas de if pour limiter le surcoût de
l'évaluation.

Une autre solution pourrait utiliser une fonction avec un nombre de
paramètres variables. Ce qui donnerai simplement :
logger.debug("texte %1 suite %2 fin", valeur1, valeur2);
Je ne sais pas si ce genre de solution existe déjà.


Merci pour vos réponses/conseils



<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise