2013-02-08 2 views
3

J'utilise log4cxx pour la journalisation. Cependant, la journalisation peut entraîner des pertes de performances que je dois minimiser. Comment puis-je désactiver la journalisation (au moment de l'exécution ou de la compilation) afin de minimiser les frais généraux - à moins de supprimer toutes les instructions de log du code?Désactiver la journalisation avec log4cxx pour une surcharge minimale

La documentation indique que

L'utilisateur doit être conscient des problèmes de performance suivants.

Performances de journalisation lorsque la journalisation est désactivée. Lorsque la consignation est désactivée entièrement ou uniquement pour un ensemble de niveaux, le coût d'une demande de consignation consiste en une invocation de méthode plus une comparaison d'entier . Le LOG4CXX_DEBUG et les macros similaires suppriment évaluation d'expression inutile si la demande n'est pas activée.

Mais comment l'éteindre entièrement? Est-ce le minimum nécessaire?

Répondre

4

Si vous voulez vraiment désactiver la connexion à tout moment de la compilation, redéfinir simplement les macros log4cxx rien dire

#define LOG4CXX_TRACE(logger, expression)  
#define LOG4CXX_DEBUG(logger, expression)  
#define LOG4CXX_INFO(logger, expression) 
#define LOG4CXX_WARN(logger, expression)  
#define LOG4CXX_ERROR(logger, expression)  
#define LOG4CXX_FATAL(logger, expression) 

zéro frais généraux. Pour le cas d'exécution, vous devez toujours engager un certain coût. D'un coup d'œil, je fais en sorte que les frais généraux soient légèrement plus importants que ce que leur documentation indique, ce qui implique généralement un appel de méthode virtuelle supplémentaire. C'est essentiellement la surcharge minimale utilisant cette bibliothèque, bien que vous puissiez obtenir de très petites améliorations en utilisant l'optimisation du temps de lien, etc. pour supprimer le surcoût d'invocation de la méthode.

Questions connexes