logo

Log4j vs SLF4J

SLF4J (Façana de registre simple per a Java) és una API dissenyada per donar accés genèric a molts marcs de registre, un d'ells és log4j.

Bàsicament és una capa d'abstracció. No és una implementació de registre. Vol dir que si esteu escrivint una biblioteca i utilitzeu SLF4J, podeu donar-la a una altra persona perquè la utilitzi i pot triar quina implementació de registre utilitzar amb SLF4J, per exemple, log4j o l'API de registre de Java. S'utilitza per evitar que les aplicacions depenguin de diferents API de registre de la mateixa manera que utilitzen biblioteques que en depenen.

Tanmateix, elaborem la diferència entre Log4J i SLF4J que només mereix una resposta de línia. és a dir, la pregunta en si és incorrecta. SLF4J i Log4J són diferents o no són components similars. Com el nom especifica, SLF4J és una façana de registre senzilla per a Java. No és un component de registre, i fins i tot no fa el registre real. Només és una capa d'abstracció d'un component de registre subjacent.

interruptor mecanografiat

En el cas que Log4j , és un component de registre i fa el registre que s'indica. Així que podem dir que SLF4J i Log4J són lògicament dues coses diferents.

Log4j vs SLF4J

Ara, tot el que heu de seleccionar, quin marc de registre heu d'utilitzar en temps d'execució. Per això, haureu d'incloure dos fitxers jar:

  • Fitxer jar d'enllaç SLF4J
  • Fitxers jar del marc de registre desitjats

Per exemple, per utilitzar log4j al vostre projecte, haureu d'incloure els fitxers jar a continuació:

cua de prioritats java
  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

Un cop hàgiu col·locat els dos fitxers jar al camí de classe de l'aplicació, SLF4J el detectarà automàticament i començarà a utilitzar log4j per processar les declaracions de registre en funció de la configuració que heu proporcionat al fitxer de configuració log4j.

Per exemple, el codi següent que podeu escriure al fitxer de classe del vostre projecte:

 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'); } } 

Per què és SLF4J millor que Log4J?

Sempre és difícil preferir-ne un entre SLF4J i Log4j. Si tens una opció, et suggeriria; L'abstracció de registre sempre és preferible que el marc de registre. Si utilitzeu una abstracció de registre, SLF4J en particular, podem migrar a qualsevol marc de registre que necessitem en el moment del desplegament sense optar per una dependència única.

declaració java if else

A continuació es mostren els motius, que són prou bons per triar SLF4J sobre Log4j:

  • Sempre és millor utilitzar l'abstracció.
  • SLF4J és una biblioteca de codi obert o una biblioteca interna que la fa independent de qualsevol implementació de registre particular, el que significa que no cal gestionar diverses configuracions de registre per a diverses biblioteques.
  • SLF4J proporciona un registre basat en marcadors de posició, que millora la llegibilitat del codi eliminant comprovacions com isInforEnabled(), isDebugEnabled(), etc.
  • Mitjançant l'ús del mètode de registre de SLF4J, ajornem el cost de la construcció de missatges de registre (cadena), fins que el necessiteu, que és eficient tant en la CPU com en la memòria.
  • Com que SLF4J utilitza menys nombre de cadenes temporals significa menys treball per al col·lector d'escombraries, el que significa un millor rendiment i rendiment per a la vostra aplicació.

Així, essencialment, SLF4J no substitueix log4j; tots dos treballen junts. Elimina la dependència de log4j de la vostra aplicació i facilita la seva substitució en el futur per la biblioteca més capaç.