Quel est le problème avec le moteur d'exécution à la découverte de l'algorithme de Apache Commons Logging
Dave Syer (SpringSource) écrit dans son blog:
Malheureusement, la pire chose à propos de commons-logging, et ce qui a rendu impopulaire avec de nouveaux outils, est aussi la découverte d'exécution de l'algorithme.
Pourquoi? Quel est le problème avec son moteur d'exécution à la découverte de l'algorithme? La Performance?
Vous devez vous connecter pour publier un commentaire.
Non, ce n'est pas la performance, c'est chargeur de classe de la douleur. JCL processus de découverte s'appuie sur le chargeur de classe hacks pour trouver la structure de journalisation au moment de l'exécution, mais ce mécanisme conduit à de nombreux problèmes, y compris un comportement inattendu, difficile à déboguer classloading à des problèmes résultant de l'accroissement de la complexité. C'est bien capturée par Ceki (l'auteur de Log4J, SLF4J et Logback) dans Réfléchir à nouveau avant l'adoption de l'commons-logging API (qui mentionne aussi des fuites de mémoire, les problèmes observés avec JCL).
Et c'est pourquoi SLF4J, qui utilise static bindings, a été créé.
Ceki d'être l'auteur de SLF4J, vous pourriez penser que ses articles sont biaisées, mais, croyez-moi, ils ne le sont pas et il fournit beaucoup de références (preuves) pour prouver son point.
Pour résumer:
Voir aussi
Commons logging est un poids léger de journalisation de la façade qui est placé sur le dessus du poids lourd API de journalisation être que log4j, java.util.l'exploitation forestière ou d'une autre pris en charge API de journalisation.
La la découverte de l'algorithme est ce que commons logging utilise pour déterminer les API de journalisation vous utilisez au moment de l'exécution de sorte qu'il peut diriger le journal des appels via son API pour le sous-API de journalisation. L'avantage de ceci est que si vous vouliez créer une bibliothèque qui ne journalisation, vous ne voulez pas à attacher les utilisateurs de votre bibliothèque en particulier des poids lourds, système de journalisation. Les appelants de votre code pouvez configurer la journalisation via log4j, java.util.la journalisation etc. et les communes de l'enregistrement de l'avant à l'API au moment de l'exécution.
Commune de rognes pour commons logging:
Une perception de la complexité accrue ainsi que l'imprévisibilité des complexes classpath hiérarchies, sans les avantages perçus des utilisateurs de commons-logging agité. Étant donné aussi que ce choix peut être forcé de vous ne pas rendre les utilisateurs sympathique. Voir cet article pour un argument convaincant contre l'utilisation de commons-logging.
Je ne peux pas parler de "cru impopulaire" aspect, je ne peux parler que pour moi-même:
Commons Logging est une façade, sur le dessus de ce que votre "réel" de journalisation peut être: Log4j, Logback ou quoi que ce soit.
L'idée d'un enregistrement de la façade est que votre application gains de la flexibilité de décider à l'exécution de journalisation mise en œuvre qu'il veut travailler avec. Les façades sont assez intelligents pour trouver des implémentations de journalisation au moment de l'exécution.
Mes anciennes applications Java utiliser Log4j, directement. Fonctionne très bien, je ne vois pas la nécessité de les modifier. Ma plus récente de Java applications utilisent probablement Logback. Je pense que la capacité à choisir de manière dynamique une journalisation est quelque chose qu'aucun de mes applications n'auront jamais besoin. Bien sûr, d'autres peuples kilométrage peut varier.
EDIT: Regarde comme je me suis trompé sur la justification de l'Commons Logging. Les liens donnés par @Pascal Thivent, en particulier la première, expliquer ce beaucoup mieux.
Commons Logging contient la logique pour déterminer au moment de l'exécution si l'utilisation de log4j ou java.util.la journalisation.*.
Que le code utilisé pour être brisé, pour l'essentiel, qu'en travaillant avec JUIL.
Sur la base des expériences avec cette, slf4j a été écrit qui utilise statique de la liaison (ou, je ne sais pas avec la version 1.6) pour choisir le cadre approprié pour l'utilisation de log4j, JUL ou la log4j fourche logback (et plus), et il comprend un pont pour permettre aux Communes code d'enregistrement à utiliser slf4j de manière transparente.
Si vous le pouvez, puis allez slf4j.