logo

Log4j vs SLF4J

SLF4J(Simple Logging Fa�ade for java) er et API designet for å gi generisk tilgang til mange loggrammeverk, log4j er en av dem.

Det er i bunn og grunn et abstraksjonslag. Det er ikke en loggimplementering. Det betyr at hvis du skriver et bibliotek og du bruker SLF4J, kan du gi det biblioteket til noen andre å bruke, og de kan velge hvilken loggimplementering som skal brukes med SLF4J, f.eks. log4j eller Java logging API. Den brukes til å forhindre at applikasjoner er avhengige av forskjellige loggings-APIer, akkurat som de bruker biblioteker som er avhengige av dem.

Imidlertid utdyper vi forskjellen mellom Log4J og SLF4J som bare fortjener ett linjesvar. dvs. selve spørsmålet er feil. SLF4J og Log4J er forskjellige, eller de er ikke like komponenter. Som navnet spesifisert, er SLF4J en enkel loggingsfasade for java. Det er ikke en loggingskomponent, og selv den gjør ikke selve loggingen. Det er bare et abstraksjonslag til en underliggende loggingskomponent.

I tilfelle av Log4j , det er en loggingskomponent, og den utfører loggingen som er instruert om å gjøre. Så vi kan si at SLF4J og Log4J logisk sett er to forskjellige ting.

Log4j vs SLF4J

Nå er alt du trenger å velge, hvilket loggingsrammeverk du må bruke i kjøretid. For det må du inkludere to jar-filer:

  • SLF4J innbindingskrukkefil
  • Ønsket logging framework jar-filer

For å bruke log4j i prosjektet ditt, må du for eksempel inkludere gitte jar-filer nedenfor:

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

Når du har plassert begge jar-filene i applikasjonens klassesti, vil SLF4J automatisk oppdage den og begynne å bruke log4j for å behandle loggsetningene basert på konfigurasjonen du oppga i log4j-konfigurasjonsfilen.

For eksempel, koden nedenfor kan du skrive i prosjektklassefilen din:

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

Hvorfor er SLF4J bedre enn Log4J?

Det er alltid vanskelig å foretrekke en mellom SLF4J og Log4j. Hvis du har et valg, vil jeg foreslå deg; logging abstraksjon er alltid å foretrekke enn logging rammeverk. Hvis du bruker en loggabstraksjon, spesielt SLF4J, kan vi migrere til et hvilket som helst loggingsrammeverk vi trenger på tidspunktet for distribusjon uten å velge enkelt avhengighet.

Følgende er grunnene som er gode nok til å velge SLF4J fremfor Log4j:

  • Det er alltid bedre å bruke abstraksjon.
  • SLF4J er et åpen kildekode-bibliotek eller internt bibliotek som gjør det uavhengig av en bestemt loggimplementering, noe som betyr at det ikke er nødvendig å administrere flere loggkonfigurasjoner for flere biblioteker.
  • SLF4J gir plassholderbasert logging, som forbedrer lesbarheten til kode ved å fjerne sjekker som isInforEnabled(), isDebugEnabled(), etc.
  • Ved å bruke loggmetoden til SLF4J, utsetter vi kostnadene ved å konstruere loggmeldinger (streng), til du trenger det, som er både CPU- og minneeffektivt.
  • Siden SLF4J bruker mindre antall midlertidige strenger betyr mindre arbeid for søppelsamleren, noe som betyr bedre gjennomstrømning og ytelse for din applikasjon.

Så i hovedsak erstatter ikke SLF4J log4j; de jobber begge sammen. Det fjerner avhengigheten av log4j fra applikasjonen din og gjør det enkelt å erstatte det i fremtiden med det mer kapable biblioteket.