web-dev-qa-db-fra.com

Log4J est-il abandonné en faveur de SLF4J?

Il semble que log4j a un certain problèmes de chargement de classe (entre autres) et il me semble que la tendance est de sortir de log4j vers slf4j. (Mise en veille prolongée a cessé d'utiliser la première en faveur de ce dernier)

  1. Est-ce vrai?
  2. Quels sont les principaux enjeux log4j qui permet de résoudre de SLF4J?
  3. Est-ce slf4j le dernier mot ou est-il même un meilleur niveau de l'industrie " la prochaine prochaine log4j "?

Mise à jour:

  • Donc, ce réponse par delfuego embrouille moi, pouvez-vous accepter/object il ?:

Vous semblez avoir trébuché sur le problème majeur avec log4j (et la bibliothèque de journalisation Apache Commons), à savoir qu'ils ont un temps ridiculement difficile de découvrir et d'interagir avec les bons classloaders car ils sont utilisés. Il y a une explication très dense, avec des exemples, ici; le message à retenir est que l'une des principales forces motrices de la nouvelle SLF4J-cadre de l'exploitation forestière était d'éliminer complètement ces problèmes. Vous pouvez échanger et voir si votre vie est faite plus facile.

49
ruchirhhi

SLF4J est en effet juste une façade forestière. Cependant, Log4J est destiné à être réussi par Logback , des mêmes auteurs.

Mise à jour : Si vous souhaitez connaître un autre avantage de SLF4J, c'est le fait que les constructions (laides) ne sont plus nécessaires pour éviter le toString() Était inutilement appelé:

if (logger.isDebugEnabled()) {
    logger.debug("Message: " + bigObject + ", " + anotherBigObject);
}

Vous pouvez plutôt utiliser des messages paramétrés:

logger.debug("Message: {}, {}", bigObject, anotherBigObject);

Voir aussi Quel est le moyen le plus rapide de (pas) la journalisation?

47
BalusC

Premièrement: un point important: SLF4J est la journalisation frontale (l'API), qui peut utiliser ci-dessous la plupart des systèmes de connexion principaux: log4j ou java.util.logging par exemple. Il est donc préférable de comporter SFL4J à journalisation des communes .

À propos de l'état de Log4J, citations de l'état de Java journalisation (il y a un an)

Une chose que je n'avais pas réalisée est que le développement log4j est essentiellement mort. Il est actuellement à la version 1.2 et les plans pour la version 1.3 ont été abandonnés en faveur du développement log4j 2.0. Cependant, il n'apparaît pas que 2.0 est en développement actif. Il convient de noter que CEKI GÜLCÜ, le fondateur original du projet Log4J, est passé à SLF4J (voir ci-dessous).

7
Kartoch

En regardant la slf4j Page Il ne semble pas que ce serait Remplacer log4j - il vous permettrait simplement d'utiliser le même Cadre de journalisation sous-jacent (p. Ex. Log4J) pour votre application entière, permettant aux bibliothèques de les accrocher automatiquement.

Cela ressemble plus à un remplacement pour Apache Commons Logging que log4j.

6
Jon Skeet

SLF4J a, à mon avis, l'énorme avantage que vous pouvez unifier la journalisation de toutes les bibliothèques que vous utilisez à travers les ponts qu'il fournit. Aucun des autres cadres d'exploitation forestière ne le permet. Cela permet aux projets de se déplacer en douceur vers SLF4J et d'ignorer les choix du cadre de journalisation que les dépendances ont apportée.

3
Thomas Lötzer

SLF4J n'est pas une vraie façade connectée. SLF4J ne prend pas en charge de nombreuses fonctionnalités de ses implémentations. Pour le court, je mentionne des exemples de log4j ci-dessous.

  • Slf4j ne peut pas spécifier un fichier de configuration sélectionné par l'utilisateur, mais oblige l'utilisateur à utiliser par défaut (log4j.properties ou log4j.xml) à l'une d'autant Java racines (chaque pot a une racine racine plus la racine JVM et Classes ou bin). Si deux fichiers JAR l'ont, il est difficile de contrôler lequel utiliser en toute sécurité.
  • SLF4J ne peut pas supporter tous les niveaux de log4j, tels que "fatal". Lors du commutateur de gros code de Log4J à SLF4J, un effort de changement d'énorme code est nécessaire (par exemple, décider de réorganiser les niveaux).
  • Deux fichiers de jar à clé (log4j-wver-slf4j.jar ou slf4j-log4j12.jar) doivent être choisis. Si la classe de classe, ne fonctionnera pas. Si vous en choisissez une fois aléatoire, perdez des fonctionnalités inattendues (par exemple Log4J-Over-Slf4j.j.jar ne prend pas en charge plusieurs fichiers journaux pour les mêmes classes; E.g. Un pour le journal des événements et un pour le journal des données brutes).
3
Steven S Wang