logo

Log4j et SLF4J

SLF4J (Façade de journalisation simple pour Java) est une API conçue pour donner un accès générique à de nombreux frameworks de journalisation, log4j en faisant partie.

Il s'agit essentiellement d'une couche d'abstraction. Il ne s'agit pas d'une implémentation de journalisation. Cela signifie que si vous écrivez une bibliothèque et que vous utilisez SLF4J, vous pouvez donner cette bibliothèque à quelqu'un d'autre et celui-ci peut choisir quelle implémentation de journalisation utiliser avec SLF4J, par exemple log4j ou l'API de journalisation Java. Il est utilisé pour empêcher les applications de dépendre de différentes API de journalisation, tout comme elles utilisent des bibliothèques qui en dépendent.

Cependant, nous expliquons la différence entre Log4J et SLF4J qui mérite une seule réponse en ligne. c'est-à-dire que la question elle-même est fausse. SLF4J et Log4J sont différents ou ne sont pas des composants similaires. Comme son nom l'indique, SLF4J est une simple façade de journalisation pour Java. Ce n'est pas un composant de journalisation, et même il n'effectue pas la journalisation proprement dite. Il ne s'agit que d'une couche d'abstraction d'un composant de journalisation sous-jacent.

Dans le cas d Log4j , il s'agit d'un composant de journalisation qui effectue la journalisation demandée. On peut donc dire que SLF4J et Log4J sont logiquement deux choses différentes.

Log4j et SLF4J

Il ne vous reste plus qu'à sélectionner le framework de journalisation que vous devez utiliser au moment de l'exécution. Pour cela, vous devrez inclure deux fichiers jar :

  • Fichier jar de liaison SLF4J
  • Fichiers jar du cadre de journalisation souhaités

Par exemple, pour utiliser log4j dans votre projet, vous devrez inclure les fichiers jar ci-dessous :

  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

Une fois que vous avez placé les deux fichiers jar dans le chemin de classe de votre application, SLF4J le détectera automatiquement et commencera à utiliser log4j pour traiter les instructions de journal en fonction de la configuration que vous avez fournie dans le fichier de configuration log4j.

variable de référence en Java

Par exemple, ci-dessous le code que vous pouvez écrire dans le fichier de classe de votre projet :

 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info('Hello World'); } } 

Pourquoi SLF4J est-il meilleur que Log4J ?

Il est toujours difficile de préférer entre le SLF4J et le Log4j. Si vous avez le choix, je vous le suggère ; L'abstraction de la journalisation est toujours préférable au cadre de journalisation. Si vous utilisez une abstraction de journalisation, SLF4J en particulier, nous pouvons migrer vers n'importe quel framework de journalisation dont nous avons besoin au moment du déploiement sans opter pour une dépendance unique.

Voici les raisons qui sont suffisantes pour choisir SLF4J plutôt que Log4j :

  • Il est toujours préférable d'utiliser l'abstraction.
  • SLF4J est une bibliothèque open source ou une bibliothèque interne qui la rend indépendante de toute implémentation de journalisation particulière, ce qui signifie qu'il n'est pas nécessaire de gérer plusieurs configurations de journalisation pour plusieurs bibliothèques.
  • SLF4J fournit une journalisation basée sur des espaces réservés, ce qui améliore la lisibilité du code en supprimant les vérifications telles que isInforEnabled(), isDebugEnabled(), etc.
  • En utilisant la méthode de journalisation de SLF4J, nous reportons le coût de construction des messages de journalisation (chaîne) jusqu'à ce que vous en ayez besoin, ce qui est à la fois efficace en termes de CPU et de mémoire.
  • Étant donné que SLF4J utilise moins de chaînes temporaires, cela signifie moins de travail pour le ramasse-miettes, ce qui signifie un meilleur débit et de meilleures performances pour votre application.

Donc, essentiellement, SLF4J ne remplace pas log4j ; ils travaillent tous les deux ensemble. Il supprime la dépendance à log4j de votre application et facilite son remplacement ultérieur par la bibliothèque plus performante.