logo

Log4j versus SLF4J

SLF4J (eenvoudige gevelregistratie voor Java) is een API die is ontworpen om generieke toegang te geven tot veel logframeworks, waarvan log4j er één is.

Het is eigenlijk een abstractielaag. Het is geen implementatie van logboekregistratie. Het betekent dat als u een bibliotheek schrijft en u gebruikt SLF4J, u die bibliotheek aan iemand anders kunt geven om te gebruiken en zij kunnen kiezen welke logimplementatie ze met SLF4J willen gebruiken, bijvoorbeeld log4j of de Java-logboek-API. Het wordt gebruikt om te voorkomen dat applicaties afhankelijk zijn van verschillende log-API's, net zoals ze bibliotheken gebruiken die daarvan afhankelijk zijn.

We gaan echter dieper in op het verschil tussen Log4J en SLF4J dat slechts één regelantwoord verdient. dat wil zeggen, de vraag zelf is verkeerd. SLF4J en Log4J zijn verschillend of zijn geen vergelijkbare componenten. Zoals de naam al aangeeft, is SLF4J een eenvoudige log-façade voor Java. Het is geen logcomponent en voert zelfs niet de daadwerkelijke logwerkzaamheden uit. Het is slechts een abstractielaag voor een onderliggende logcomponent.

In het geval van Log4j , het is een logboekcomponent en voert de logboekregistratie uit waarvoor het is opgedragen. We kunnen dus zeggen dat SLF4J en Log4J logischerwijs twee verschillende dingen zijn.

Log4j versus SLF4J

Nu hoeft u alleen nog maar te selecteren welk logframework u in runtime wilt gebruiken. Daarvoor moet u twee jar-bestanden toevoegen:

  • SLF4J bindend jar-bestand
  • Gewenste jar-bestanden van het logframework

Als u bijvoorbeeld log4j in uw project wilt gebruiken, moet u de onderstaande jar-bestanden opnemen:

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

Zodra u beide jar-bestanden in het klassenpad van uw toepassing hebt geplaatst, zal SLF4J deze automatisch detecteren en log4j gaan gebruiken voor het verwerken van de log-instructies op basis van de configuratie die u heeft opgegeven in het log4j-configuratiebestand.

De onderstaande code kunt u bijvoorbeeld in uw projectklassebestand schrijven:

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

Waarom is SLF4J beter dan Log4J?

Het is altijd moeilijk om de voorkeur te geven aan de SLF4J en de Log4j. Als je de keuze hebt, zou ik je aanraden; logging-abstractie heeft altijd de voorkeur boven logging-framework. Als u een log-abstractie gebruikt, met name SLF4J, kunnen we migreren naar elk log-framework dat we nodig hebben op het moment van implementatie, zonder te kiezen voor een enkele afhankelijkheid.

Hieronder volgen de redenen die goed genoeg zijn om SLF4J boven Log4j te kiezen:

  • Het is altijd beter om abstractie te gebruiken.
  • SLF4J is een open-sourcebibliotheek of interne bibliotheek die deze onafhankelijk maakt van een specifieke logimplementatie, wat betekent dat het niet nodig is om meerdere logconfiguraties voor meerdere bibliotheken te beheren.
  • SLF4J biedt logboekregistratie op basis van tijdelijke aanduidingen, waardoor de leesbaarheid van code wordt verbeterd door controles zoals isInforEnabled(), isDebugEnabled(), enz. te verwijderen.
  • Door de logmethode van SLF4J te gebruiken, stellen we de kosten voor het samenstellen van logberichten (string) uit totdat u deze nodig heeft, wat zowel CPU- als geheugenefficiënt is.
  • Omdat SLF4J minder tijdelijke tekenreeksen gebruikt, betekent dit minder werk voor de garbage collector, wat een betere doorvoer en prestaties voor uw toepassing betekent.

Dus in wezen vervangt SLF4J log4j niet; ze werken allebei samen. Het verwijdert de afhankelijkheid van log4j uit uw applicatie en maakt het gemakkelijk om deze in de toekomst te vervangen door de meer capabele bibliotheek.