logo

Log4j vs SLF4J

SLF4J (jednoduchá logovacia fasáda pre java) je API navrhnuté tak, aby poskytovalo všeobecný prístup k mnohým logovacím rámcom, pričom log4j je jedným z nich.

Je to v podstate vrstva abstrakcie. Nejde o implementáciu protokolovania. Znamená to, že ak píšete knižnicu a používate SLF4J, môžete túto knižnicu dať na používanie niekomu inému a ten si môže vybrať, ktorú implementáciu protokolovania použije so SLF4J, napr. log4j alebo Java protokolovacie API. Používa sa na zabránenie tomu, aby aplikácie boli závislé od rôznych protokolovacích API, rovnako ako používajú knižnice, ktoré sú na nich závislé.

Rozpracovali sme však rozdiel medzi Log4J a SLF4J, ktorý si zaslúži iba jednu riadkovú odpoveď. t.j. samotná otázka je nesprávna. SLF4J a Log4J sú odlišné alebo nejde o podobné komponenty. Ako už bolo špecifikované v názve, SLF4J je jednoduchá logovacia fasáda pre java. Nie je to protokolovací komponent a dokonca ani nevykonáva skutočné protokolovanie. Je to len vrstva abstrakcie k základnému logovaciemu komponentu.

V prípade Log4j , je súčasťou protokolovania a vykonáva pokyny na protokolovanie. Môžeme teda povedať, že SLF4J a Log4J sú logicky dve rôzne veci.

Log4j vs SLF4J

Teraz si už len musíte vybrať, ktorý protokolovací rámec potrebujete použiť v runtime. Na to budete musieť zahrnúť dva súbory jar:

  • súbor jar viazania SLF4J
  • Požadované súbory jar logovacieho rámca

Napríklad, ak chcete použiť log4j vo svojom projekte, budete musieť zahrnúť nižšie uvedené jar súbory:

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

Akonáhle umiestnite oba súbory jar do vašej triedy cesty aplikácie, SLF4J to automaticky zistí a začne používať log4j na spracovanie protokolových príkazov na základe konfigurácie, ktorú ste zadali v konfiguračnom súbore log4j.

Napríklad nižšie uvedený kód môžete napísať do súboru triedy projektu:

nedeterministické konečné automaty
 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'); } } 

Prečo je SLF4J lepší ako Log4J?

Vždy je ťažké uprednostniť jeden medzi SLF4J a Log4j. Ak máte na výber, navrhol by som vám; abstrakcia protokolovania je vždy výhodnejšia ako rámec protokolovania. Ak používate abstrakciu protokolovania, konkrétne SLF4J, môžeme migrovať na akýkoľvek rámec protokolovania, ktorý požadujeme v čase nasadenia, bez toho, aby sme sa rozhodli pre jednu závislosť.

Nasledujú dôvody, ktoré sú dosť dobré na to, aby ste si vybrali SLF4J pred Log4j:

  • Vždy je lepšie použiť abstrakciu.
  • SLF4J je knižnica s otvoreným zdrojom alebo interná knižnica, vďaka ktorej je nezávislá od akejkoľvek konkrétnej implementácie protokolovania, čo znamená, že nie je potrebné spravovať viacero konfigurácií protokolovania pre viaceré knižnice.
  • SLF4J poskytuje protokolovanie založené na zástupnom symbole, ktoré zlepšuje čitateľnosť kódu odstránením kontrol ako isInforEnabled(), isDebugEnabled() atď.
  • Použitím metódy protokolovania SLF4J odkladáme náklady na vytváranie protokolovacích správ (reťazca), kým to nepotrebujete, čo je efektívne z hľadiska CPU aj pamäte.
  • Keďže SLF4J používa menší počet dočasných reťazcov, znamená to menej práce pre zberač odpadu, čo znamená lepšiu priepustnosť a výkon pre vašu aplikáciu.

Takže v podstate SLF4J nenahrádza log4j; obaja spolupracujú. Odstraňuje závislosť na log4j z vašej aplikácie a uľahčuje jej nahradenie v budúcnosti schopnejšou knižnicou.