Pourquoi utiliser l'un des paquets suivants plutôt que l'autre ?
- Journalisation Java
- Enregistrement des communes
- Log4j
- SLF4j
- Logback
Pourquoi utiliser l'un des paquets suivants plutôt que l'autre ?
Par ordre chronologique d'apparition de l'api (pour autant que je sache) :
logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
// Note that it's actually *more* efficient than this - see Huxi's comment below...
logger.debug("The entry is " + entry + ".");
}
Je trouve que la journalisation en Java est confuse, incohérente, mal documentée et surtout désordonnée. De plus, il existe une énorme quantité de similitudes entre ces cadres de journalisation, ce qui entraîne une duplication des efforts et une confusion quant à l'environnement de journalisation dans lequel vous vous trouvez réellement. En particulier, si vous travaillez dans une pile d'applications web Java sérieuse, vous êtes souvent dans un environnement de journalisation de type multiple (par exemple, hibernate peut utiliser log4j, et tomcat java.util.logging). Apache Commons est censé faire le lien entre les différents cadres de journalisation, mais il ne fait qu'ajouter de la complexité. Si vous ne le savez pas à l'avance, c'est tout à fait déconcertant. Pourquoi mes messages de journal ne s'impriment-ils pas sur la console, etc. Ohh parce que je regarde les logs de Tomcat, et pas ceux de log4j. Ajoutant encore une autre couche de complexité, le serveur d'application peut avoir des configurations globales de journalisation qui peuvent ne pas reconnaître les configurations locales pour une application web particulière. Enfin, tous ces cadres de journalisation sont BEAUCOUP TROP COMPLIQUÉS. La journalisation en Java a été un désordre désorganisé laissant les développeurs comme moi frustrés et confus.
Les premières versions de Java ne disposaient pas d'une structure de journalisation intégrée, ce qui a conduit à ce scénario.
Il y a un point important qui n'a pas été mentionné auparavant :
SLF4J (et Logback et LOG4J en tant que backend de journalisation) prend en charge un contexte de diagnostic mappé (MDC). javadoc y documentation ).
Il s'agit essentiellement d'une Map<String,String> locale au thread que vous pouvez utiliser pour ajouter des informations contextuelles supplémentaires à votre événement de journalisation. L'état actuel du MDC est joint à chaque événement.
Cela peut être incroyablement utile si vous y mettez des choses comme le nom d'utilisateur et l'URL de la requête (dans le cas d'une webapp). Cela peut être fait automatiquement en utilisant un filtre, par exemple.
Voir aussi les réponses à la question Quelles sont les meilleures pratiques pour enregistrer une erreur ? surtout :
Il y a quelques problèmes potentiels problèmes de chargement de classe avec Commons la journalisation.
Log4J et SLF4J ont été développés par la même personne. la même personne, qui a appris des problèmes rencontrés dans la pratique avec Log4J.
Dans notre projet d'entreprise, nous utilisons LOG4j et il est très facile à utiliser comme Stephen l'a montré dans son exemple. Nous avons également écrit nos propres classes de modèles pour LOG4j afin que vous puissiez créer vos propres schémas de fichiers de sortie. Vous pouvez décrire à quoi doit ressembler votre fichier journal. Il est possible d'améliorer les classes originales de LOG4J.
Toutes les propriétés de LOG4j peuvent être modifiées dans un fichier log4j.properties, de sorte que vous pouvez utiliser différents fichiers pour différents projets.
La journalisation Java n'est pas ma préférée, mais c'est peut-être parce que j'utilise log4j depuis le début.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.