logo

Log4j protiv SLF4J

SLF4J (faza jednostavnog bilježenja za Javu) je API dizajniran da omogući generički pristup mnogim okvirima za bilježenje, a log4j je jedan od njih.

To je u osnovi sloj apstrakcije. To nije implementacija zapisivanja. To znači da ako pišete biblioteku i koristite SLF4J, tu biblioteku možete dati nekome drugome na korištenje i on može odabrati koju će implementaciju bilježenja koristiti sa SLF4J, npr. log4j ili Java logging API. Koristi se za sprječavanje ovisnosti aplikacija o različitim API-jima za bilježenje baš kao što koriste biblioteke koje ovise o njima.

Međutim, elaboriramo razliku između Log4J i SLF4J koja zaslužuje samo jedan odgovor. tj. samo pitanje je pogrešno. SLF4J i Log4J su različite, ili nisu slične komponente. Kao što je navedeno u nazivu, SLF4J je jednostavna fasada za bilježenje za Javu. To nije komponenta za bilježenje, pa čak i ne radi stvarno bilježenje. To je samo sloj apstrakcije donje komponente zapisivanja.

string u json java

U slučaju Log4j , to je komponenta bilježenja i radi bilježenje koje je naloženo. Dakle, možemo reći da su SLF4J i Log4J logično dvije različite stvari.

aes protiv des
Log4j protiv SLF4J

Sada, sve što trebate odabrati, koji okvir za bilježenje trebate koristiti u vremenu izvođenja. Za to ćete morati uključiti dvije jar datoteke:

  • SLF4J jar datoteka za uvezivanje
  • Željene jar datoteke okvira za bilježenje

Na primjer, da biste koristili log4j u svom projektu, morat ćete uključiti dolje navedene jar datoteke:

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

Nakon što smjestite obje jar datoteke u stazu klase svoje aplikacije, SLF4J će to automatski detektirati i početi koristiti log4j za obradu iskaza dnevnika na temelju konfiguracije koju ste dali u log4j konfiguracijskoj datoteci.

Na primjer, donji kod možete napisati u datoteku klase projekta:

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

Zašto je SLF4J bolji od Log4J?

Uvijek je teško dati prednost jednom između SLF4J i Log4j. Ako imate izbora, predložio bih vam; apstrakcija zapisivanja uvijek je bolja od okvira zapisivanja. Ako koristite apstrakciju bilježenja, posebno SLF4J, možemo migrirati na bilo koji okvir bilježenja koji nam je potreban u trenutku implementacije bez odabira pojedinačne ovisnosti.

usporediti u Javi

Slijede razlozi koji su dovoljno dobri da odaberete SLF4J umjesto Log4j:

  • Uvijek je bolje koristiti apstrakciju.
  • SLF4J je biblioteka otvorenog koda ili interna biblioteka koja je čini neovisnom o bilo kojoj određenoj implementaciji bilježenja, što znači da nema potrebe za upravljanjem više konfiguracija bilježenja za više biblioteka.
  • SLF4J pruža evidentiranje na temelju rezerviranog mjesta, što poboljšava čitljivost koda uklanjanjem provjera kao što su isInforEnabled(), isDebugEnabled(), itd.
  • Korištenjem metode bilježenja SLF4J, odgađamo trošak konstruiranja poruka bilježenja (string), dok vam ne zatreba, što je učinkovito i za CPU i za memoriju.
  • Budući da SLF4J koristi manji broj privremenih nizova, znači manje posla za skupljača smeća, što znači bolju propusnost i performanse za vašu aplikaciju.

Dakle, u biti, SLF4J ne zamjenjuje log4j; oboje rade zajedno. Uklanja ovisnost o log4j iz vaše aplikacije i olakšava njegovu zamjenu u budućnosti sa sposobnijom bibliotekom.