logo

Log4j vs SLF4J

SLF4J (jednoduchá logovací fasáda pro java) je API navržené tak, aby poskytovalo obecný přístup k mnoha logovacím rámcům, přičemž log4j je jedním z nich.

Je to v podstatě vrstva abstrakce. Nejedná se o implementaci protokolování. To znamená, že pokud píšete knihovnu a používáte SLF4J, můžete tuto knihovnu dát k použití někomu jinému a ten si může vybrat, kterou implementaci protokolování použít se SLF4J, např. log4j nebo Java protokolovací API. Používá se k tomu, aby aplikace nebyly závislé na různých protokolovacích API, stejně jako používají knihovny, které jsou na nich závislé.

Rozebíráme však rozdíl mezi Log4J a SLF4J, který si zaslouží pouze jednořádkovou odpověď. tedy samotná otázka je špatná. SLF4J a Log4J se liší nebo se nejedná o podobné komponenty. Jak je uvedeno v názvu, SLF4J je jednoduchá logovací fasáda pro java. Nejedná se o protokolovací komponentu, a dokonce ani neprovádí skutečné protokolování. Je to pouze abstraktní vrstva k podkladové logovací komponentě.

V případě Log4j , je to protokolovací komponenta a provádí protokolování podle pokynů. Můžeme tedy říci, že SLF4J a Log4J jsou logicky dvě různé věci.

Log4j vs SLF4J

Nyní stačí vybrat, který protokolovací rámec potřebujete použít za běhu. K tomu budete muset zahrnout dva soubory jar:

  • SLF4J vazební soubor jar
  • Požadované soubory jar logovacího rámce

Chcete-li například ve svém projektu použít log4j, budete muset zahrnout níže uvedené soubory jar:

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

Jakmile umístíte oba soubory jar do cesty třídy vaší aplikace, SLF4J to automaticky detekuje a začne používat log4j pro zpracování příkazů protokolu na základě konfigurace, kterou jste zadali v konfiguračním souboru log4j.

Například níže uvedený kód můžete napsat do souboru třídy projektu:

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

Proč je SLF4J lepší než Log4J?

Vždy je obtížné upřednostnit jeden mezi SLF4J a Log4j. Pokud máte na výběr, doporučil bych vám; logovací abstrakce je vždy výhodnější než logovací rámec. Pokud používáte abstrakci protokolování, konkrétně SLF4J, můžeme migrovat na jakýkoli rámec protokolování, který požadujeme v době nasazení, aniž bychom se rozhodli pro jedinou závislost.

Níže jsou uvedeny důvody, které jsou dost dobré pro výběr SLF4J před Log4j:

  • Vždy je lepší použít abstrakci.
  • SLF4J je knihovna s otevřeným zdrojovým kódem nebo interní knihovna, díky které je nezávislá na jakékoli konkrétní implementaci protokolování, což znamená, že není třeba spravovat více konfigurací protokolování pro více knihoven.
  • SLF4J poskytuje protokolování založené na zástupných symbolech, které zlepšuje čitelnost kódu odstraněním kontrol jako isInforEnabled(), isDebugEnabled() atd.
  • Použitím metody protokolování SLF4J odkládáme náklady na vytváření protokolovacích zpráv (řetězce), dokud je nebudete potřebovat, což je efektivní jak z CPU, tak z paměti.
  • Protože SLF4J používá menší počet dočasných řetězců, znamená to méně práce pro sběrač odpadu, což znamená lepší propustnost a výkon pro vaši aplikaci.

SLF4J tedy v podstatě nenahrazuje log4j; oba pracují společně. Odstraňuje závislost na log4j z vaší aplikace a usnadňuje její budoucí nahrazení schopnější knihovnou.