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.
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.