Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1356 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [log4j] optimisation: tester si niveau actif avant de logger?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[log4j] optimisation: tester si niveau actif avant de logger?

n°1609542
cybercouf
Posté le 07-09-2007 à 18:51:16  profilanswer
 

Je me pose une grande question: (utilisant la lib commons d'apache)
 

Code :
  1. LOG.info("texte" );


est t'il plus couteux que de tester avant:

Code :
  1. if (LOG.isInfoEnabled()) LOG.info("texte" );


 
ou alors de toute facon dans la fonction de log le test sera fait assez tot?
J'ai commence a regarder dans le source code de la lib mais je m'y perd un peu avec tout ces appels d'implementation.
 
 
 


---------------
Habillé par Canon, Gallerie web v1.0
mood
Publicité
Posté le 07-09-2007 à 18:51:16  profilanswer
 

n°1609608
charly007
Posté le 07-09-2007 à 22:03:21  profilanswer
 

Je me trompe ou le titre prête à confusion avec le post : log4j != jakarta commons logging.
 
Je ne sais pas pour common logging, mais pour log4j il y a ça :
http://logging.apache.org/log4j/1. [...] erformance
 
En pratique, on ne teste que le niveau debug.

Message cité 1 fois
Message édité par charly007 le 07-09-2007 à 23:19:33
n°1609662
sircam
I Like Trains
Posté le 08-09-2007 à 11:31:33  profilanswer
 

Citation :

ou alors de toute facon dans la fonction de log le test sera fait assez tot?


La question n'est pas là. Le problème, c'est que LOG.debug(expression) (ou .info) implique que expression soit évaluée. Il sera toujours trop tard quand le test "dois-je logguer" sera réalisé par log4j.
 
Je me tracasserais pas trop pour ce genre de micro-optimisations. En général, je teste isDebugEnabled si l'expression à logger est relativement lourde à évaluer, ou si elle se situe dans une boucle.
 
Dans les autres cas, je ne suis pas certain que c'est là que tu auras des bottlenecks.  
 
Si tu veux vraiment optimiser sans rendre ton code illisible, prévoit une transformation de ta source lors du build pour remplacer tous les LOG.debug en if (LOG.isDebugEnabled) LOG.debug, dont l'overhead est très faible.

n°1609674
cybercouf
Posté le 08-09-2007 à 13:14:09  profilanswer
 

charly007 a écrit :

Je me trompe ou le titre prête à confusion avec le post : log4j != jakarta commons logging.

 

Je ne sais pas pour common logging, mais pour log4j il y a ça :
http://logging.apache.org/log4j/1. [...] erformance

 

En pratique, on ne teste que le niveau debug.

 

Effectivement me suis trompé dans le titre, c'est commons que j'utilise. Merci pour le lien, j'imagine que le comportement à ce niveau doit etre le meme entre commons logging et log4j.

 


sircam a écrit :

Citation :

ou alors de toute facon dans la fonction de log le test sera fait assez tot?


La question n'est pas là. Le problème, c'est que LOG.debug(expression) (ou .info) implique que expression soit évaluée. Il sera toujours trop tard quand le test "dois-je logguer" sera réalisé par log4j.

 

Je me tracasserais pas trop pour ce genre de micro-optimisations. En général, je teste isDebugEnabled si l'expression à logger est relativement lourde à évaluer, ou si elle se situe dans une boucle.

 

Dans les autres cas, je ne suis pas certain que c'est là que tu auras des bottlenecks.

 

Si tu veux vraiment optimiser sans rendre ton code illisible, prévoit une transformation de ta source lors du build pour remplacer tous les LOG.debug en if (LOG.isDebugEnabled) LOG.debug, dont l'overhead est très faible.

 

Hum pas con ton idée de pré-formater le code avant build, faut que je regarde comment on fait ça dans Eclipse.
Donc sinon je comprends que ça peut valoir le coup pour le niveau debug (ou plus bas) vu qu'il y en a génaralement bien plus que les autres, et donc eviter un certain nombre d'evaluation des parametres.
Comme c'est une application qui mouline assez vite, je ferais le test au moins pour les appel a debug avec evaluation un chouilla couteuse.

 

En tout cas c'est bien plus clair pour moi maintenant, merci à vous deux!  :jap:

 


Message édité par cybercouf le 08-09-2007 à 13:14:27

---------------
Habillé par Canon, Gallerie web v1.0

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [log4j] optimisation: tester si niveau actif avant de logger?

 

Sujets relatifs
PB REQUETE SQL POUR SE LOGGER SUR MON SITE[C#.net] Tester l'existence d'un répertoire sur un serveur FTP
[Résolu] Expirer la cache au niveau de la pageprobleme dans un projet (niveau debutant)
tester des caracteresOpenSSL - traitements bas niveau (pro only)
MySQL - Optimisation d'une requête avec plusieurs JOINTaille de processus - optimisation.
Optimisation sous contrainte et moindre carrés en Rtester des variables
Plus de sujets relatifs à : [log4j] optimisation: tester si niveau actif avant de logger?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR