logo

Log4j vs SLF4J

SLF4J (Fațadă de înregistrare simplă pentru java) este un API conceput pentru a oferi acces generic la multe cadre de logare, log4j fiind unul dintre ele.

Este practic un strat de abstractizare. Nu este o implementare de logare. Înseamnă că, dacă scrieți o bibliotecă și utilizați SLF4J, puteți da acea bibliotecă altcuiva pentru a o folosi și acesta poate alege ce implementare de jurnalizare să folosească cu SLF4J, de exemplu, log4j sau API-ul de logare Java. Este folosit pentru a preveni ca aplicațiile să fie dependente de diferite API-uri de jurnalizare, așa cum folosesc biblioteci care sunt dependente de ele.

Cu toate acestea, elaborăm diferența dintre Log4J și SLF4J care merită doar un răspuns de linie. adică întrebarea în sine este greșită. SLF4J și Log4J sunt diferite sau nu sunt componente similare. După cum a specificat numele, SLF4J este o simplă fațadă de înregistrare pentru java. Nu este o componentă de jurnalizare și nici măcar nu face înregistrarea efectivă. Este doar un strat de abstractizare pentru o componentă de jurnalizare subiacentă.

În cazul în care Log4j , este o componentă de jurnalizare și efectuează înregistrarea instruită să o facă. Deci putem spune că SLF4J și Log4J sunt din punct de vedere logic două lucruri diferite.

Log4j vs SLF4J

Acum, tot ce trebuie să selectați, ce cadru de înregistrare trebuie să utilizați în timpul de execuție. Pentru aceasta, va trebui să includeți două fișiere jar:

  • Fișier jar obligatoriu SLF4J
  • Fișierele jar de cadru de înregistrare dorite

De exemplu, pentru a utiliza log4j în proiectul dvs., va trebui să includeți fișierele jar de mai jos:

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

Odată ce ați plasat ambele fișiere jar în calea clasei aplicației, SLF4J îl va detecta automat și va începe să utilizeze log4j pentru procesarea instrucțiunilor de jurnal pe baza configurației furnizate în fișierul de configurare log4j.

hashtable java

De exemplu, mai jos codul pe care îl puteți scrie în fișierul clasei de proiect:

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

De ce este SLF4J mai bun decât Log4J?

Este întotdeauna dificil să preferați unul între SLF4J și Log4j. Dacă aveți de ales, v-aș sugera; abstracția în jurnal este întotdeauna de preferat decât cadrul de înregistrare. Dacă utilizați o abstracție de jurnalizare, în special SLF4J, putem migra la orice cadru de înregistrare de care avem nevoie în momentul implementării, fără a opta pentru o singură dependență.

Următoarele sunt motivele, care sunt suficient de bune pentru a alege SLF4J în locul Log4j:

  • Este întotdeauna mai bine să folosiți abstractizarea.
  • SLF4J este o bibliotecă open-source sau o bibliotecă internă care o face independentă de orice implementare particulară de înregistrare, ceea ce înseamnă că nu este nevoie să gestionați mai multe configurații de înregistrare pentru mai multe biblioteci.
  • SLF4J oferă o înregistrare bazată pe substituenți, care îmbunătățește lizibilitatea codului prin eliminarea verificărilor precum isInforEnabled(), isDebugEnabled(), etc.
  • Folosind metoda de înregistrare în jurnal a SLF4J, amânăm costul construirii mesajelor de înregistrare (șir), până când aveți nevoie de el, care este eficient atât CPU, cât și memorie.
  • Deoarece SLF4J utilizează un număr mai mic de șiruri temporare înseamnă mai puțină muncă pentru colectorul de gunoi, ceea ce înseamnă un randament și performanță mai bune pentru aplicația dvs.

Deci, în esență, SLF4J nu înlocuiește log4j; amândoi lucrează împreună. Îndepărtează dependența de log4j din aplicația dvs. și facilitează înlocuirea acesteia în viitor cu o bibliotecă mai capabilă.