Question

Pourquoi on utiliserait l'un des paquets suivants au lieu de l'autre?

  • Java Connexion
  • Commons Logging
  • Log4j
  • SLF4J
  • Logback
Était-ce utile?

La solution

Dans l'ordre chronologique des api apperance (pour autant que je sache):

  • Log4j parce que la plupart tout le monde l'utilise (dans mon expérience)
  • Commons Logging parce que les projets open source utilisent (afin qu'ils puissent intégrer avec ce cadre l'exploitation forestière est utilisé dans la solution intégrée); particulièrement valable si vous êtes une API / Framework / OSS et vous comptent sur d'autres paquets qui utilisent Commons Logging.
  • Commons Logging parce que vous ne voulez pas « verrouiller » à un cadre particulier de consignation (vous verrouillez donc à la place jusqu'à ce que Commons Logging vous donne la place) - Je ne pense pas qu'il soit judicieux de décider en utilisant ce point la raison.
  • l'enregistrement Java parce que vous ne voulez pas ajouter dans un pot supplémentaire.
  • SLF4J parce qu'il est plus récent que Commons Logging et fournit la connexion paramétrées:

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 + "."); 
}
  • Logback parce qu'il est plus récent que log4j et encore une fois, prend en charge l'enregistrement paramétrés, car il met en œuvre SLF4J directement
  • SLF4J / Logback parce qu'il est écrit par le même gars qui a fait log4j, donc il a fait mieux (selon Ken G -. Il semble grâce à s'adapter quand on regarde leur premiers messages d'information )
  • SLF4J parce qu'ils publient également un adaptateur log4j de sorte que vous ne devez pas « passer à » log4j dans le code ancien - juste faire log4j.properties utilisent SLF4J et sa configuration

Autres conseils

Je trouve la connexion Java pour être source de confusion, incohérent, mal documenté, et surtout hasardeux. De plus, il y a une énorme quantité de similitude entre ces cadres d'exploitation forestière entraînant la duplication des efforts et de la confusion quant à l'environnement de l'exploitation forestière que vous êtes réellement. En particulier, si vous travaillez dans une pile d'applications Web sérieux Java, vous êtes souvent plusieurs environnements d'exploitation à un moment donné; (Par exemple, mise en veille prolongée peut utiliser log4j et tomcat java.util.logging). Apache Commons est destiné à combler les différents cadres d'exploitation forestière, mais ajoute vraiment un peu plus complexe. Si vous ne savez pas à l'avance, il est tout à fait déconcertant. Pourquoi mes messages journaux ne s'impriment sur la console, etc.? Ohh parce que je regarde les journaux Tomcat, et non log4j. Ajout d'une autre couche de complexité, le serveur d'application peut avoir des configurations d'exploitation globales qui peuvent ne pas reconnaître les configurations locales pour une application web particulière. Enfin, tous ces cadres sont d'exploitation forestière trop compliqué. Exploitation forestière en Java a été un gâchis désorganisé laissant les développeurs comme moi frustrés et confus.

Les premières versions de Java ne disposaient pas d'un cadre de l'exploitation forestière intégrée menant à ce scénario.

Il y a un point important qui n'a pas été mentionné avant:

SLF4J (et les deux Logback et LOG4J comme base de journalisation) un support pour un soi-disant mappé Contexte de diagnostic (MDC, voir et href="http://logback.qos.ch/manual/mdc.html" rel="nofollow noreferrer"> documentation ).

Ceci est essentiellement une carte thread local que vous pouvez utiliser pour ajouter des informations de contexte supplémentaire à votre événement de journalisation. L'état actuel du MDC est attaché à chaque événement.

Cela peut être très utile si vous mettez des choses comme le nom d'utilisateur et l'URL de la demande (en cas d'une webapp) en elle. Cela peut se faire automatiquement à l'aide d'un filtre, par exemple.

Voir aussi des réponses à la question Quelles sont les meilleures pratiques pour enregistrer une erreur , en particulier:

  • Il y a un certain potentiel questions communes avec chargement de classes Exploitation forestière.

  • Log4J et SLF4J ont été développés par     la même personne, l'apprentissage de     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 a montré dans son exemple. Nous avons également écrit nos propres classes de modèle pour LOG4J de sorte que vous pouvez créer vos propres schémas de fichiers de sortie. Vous pouvez décrire la façon dont votre fichier journal devrait ressembler. Il est possible d'améliorer les classes log4j d'origine.

Toutes les propriétés LOG4J vous pouvez modifier dans un fichier log4j.properties, de sorte que vous pouvez utiliser différents fichiers pour différents projets.

journalisation Java n'est pas mon favorit, mais cela pourrait être parce que je l'utilise log4j depuis le début.

Le Commons Logging aperçu donne la raison de son existence: la connexion à partir du code bibliothèque, lorsque vous n'a aucun contrôle sur le cadre de l'exploitation forestière sous-jacente. Très important pour les différents projets Apache, qui seront liés à des applications extérieures. Peut-être pas si important pour les projets informatiques internes, où vous avez le contrôle complet.

Cela dit, j'écris Commons Logging, comme beaucoup d'autres développeurs que je connais. La raison est de minimiser les bagages mentale: vous pouvez modifier des projets ou des emplois, et ne pas avoir à apprendre un nouveau cadre (à condition que le nouvel emploi / projet utilise également CL, et / ou vous pouvez les convaincre de passer à elle)

En outre, il y a une certaine valeur à créer vos propres emballages autour de ce que le cadre que vous utilisez. Comme cela est décrit , je préfère utiliser un objet LogWrapper pour fournir sur mesure la mise en chaîne (important), et de minimiser l'encombrement visuel des états d'exploitation (moins importante).

En général, j'utiliser par défaut Log4J.

J'utiliser Java Connexion si je ne me dérangeait pas une dépendance sur Java 1.4, mais je voudrais encore utiliser Log4J préférence.

J'utiliser Commons Logging si je renforçait quelque chose qui déjà utilisé.

Je suggère la création d'une façade mince d'enregistrement qui peut écrire à l'un des cadres de l'exploitation forestière, à quel point le choix du moteur de soutien deviennent à peu près un point discutable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top