Úvod do SLF4J

1. Prehľad

Simple Logging Facade for Java (skrátene SLF4J) - slúži ako fasáda pre rôzne rámce protokolovania (napr. Java.util.logging, logback, Log4j). Ponúka všeobecné API, vďaka čomu je protokolovanie nezávislé od skutočnej implementácie.

To umožňuje koexistenciu rôznych rámcov protokolovania. Pomáha tiež migrovať z jedného rámca do druhého. Nakoniec ponúka okrem štandardizovaného API aj nejaký „syntaktický cukor“.

Tento článok bude pojednávať o závislostiach a konfigurácii potrebných na integráciu SLF4J s programami Log4j2, Logback, Log4J2 a Jakarta Commons Logging. Viac informácií o každej z týchto implementácií si môžete prečítať v článku Úvod do protokolovania Java.

2.Nastavenie Log4j2

Ak chcete používať SLF4J s Log4j2, mali by ste pridať nasledujúce knižnice pom.xml:

 org.apache.logging.log4j log4j-api 2.7 org.apache.logging.log4j log4j-jadro 2,7 org.apache.logging.log4j log4j-slf4j-impl 2,7 

Najnovšiu verziu nájdete tu: log4j-api, log4j-core, log4j-slf4j-impl.

Skutočná konfigurácia protokolovania je v súlade s natívnou konfiguráciou protokolu Log4j 2. Pozrime sa, ako Logger inštancia je vytvorená:

verejná trieda SLF4JExample {súkromný statický protokolovač Logger = LoggerFactory.getLogger (SLF4JExample.class); public static void main (String [] args) {logger.debug ("Debug log správa"); logger.info ("Informačná správa protokolu"); logger.error ("Chybová správa z protokolu"); }}

Všimnite si, že Logger a LoggerFactory patrí do org.slf4j balíček. Príklad projektu bežiaceho s vysvetlenou konfiguráciou je k dispozícii tu.

3.Nastavenie prihlásenia

Ak chcete používať SLF4J s protokolom Logback, nemusíte do svojej cesty ku triede pridávať SLF4J. Logback už používa SLF4J. Považuje sa to za referenčnú implementáciu. Musíme zahrnúť iba knižnicu Logback:

 ch.qos.logback logback-classic 1.1.7 

Najnovšiu verziu nájdete tu: logback-classic.

Konfigurácia je špecifická pre Logback, ale bez problémov funguje s SLF4J. Ak sú správne zavedené závislosti a konfigurácia, na spracovanie protokolovania je možné použiť rovnaký kód z predchádzajúcich častí.

4.Nastavenie Log4j

V predchádzajúcich častiach sme sa zaoberali prípadom použitia, keď SLF4J „sedí“ nad konkrétnou implementáciou protokolovania. Pri takomto použití úplne abstrahuje od základného rámca.

Existujú prípady, keď existujúce riešenie ťažby nemožno nahradiť napr. z dôvodu požiadaviek tretích strán. To však neznamená, že projekt je „odsúdený“ iba na už použitý rámec.

SLF4J je možné nakonfigurovať ako most, kde sú hovory na existujúcu štruktúru presmerované na ňu. Pridajme potrebné závislosti, aby sme vytvorili most pre Log4j:

 org.slf4j log4j-over-slf4j 1.7.30 

Keď je závislosť na mieste (najnovšie skontrolujte na log4j-over-slf4j), všetky hovory na Log4j budú presmerované na SLF4J. Zvážte oficiálnu dokumentáciu a dozviete sa viac o premostení existujúcich rámcov.

Rovnako ako v prípade iných rámcov, Log4j môže slúžiť ako podkladová implementácia. Pridajme potrebné závislosti:

 org.slf4j slf4j-log4j12 1.7.30 log4j log4j 1.2.17 

Najnovšiu verziu nájdete tu pre slf4j-log4j12 a log4j. Tu je k dispozícii ukážkový projekt nakonfigurovaný vysvetleným spôsobom.

5.Nastavenie mosta JCL

V predchádzajúcich častiach sme si ukázali, ako sa dá rovnaká kódová základňa použiť na podporu protokolovania pomocou rôznych implementácií. Aj keď je to hlavný prísľub a sila SLF4J, je to aj cieľ v pozadí JCL (Jakarta Commons Logging alebo Apache Commons Logging).

JCL je vo svojich zámeroch rámec podobný SLF4J. Hlavný rozdiel je v tom, že JCL rieši základnú implementáciu počas doby vykonávania prostredníctvom systému načítania triedy. Tento prístup je vnímaný ako problematický v prípadoch, keď sú v hre vlastné triedové nakladače.

SLF4J rieši svoje väzby v čase kompilácie. Je to vnímané jednoduchšie, ale dosť silné.

V mostovom režime môžu našťastie spolupracovať dva rámce:

 org.slf4j jcl-over-slf4j 1.7.30 

Najnovšiu verziu závislostí nájdete tu jcl-over-slf4j.

Rovnako ako v ostatných prípadoch, rovnaká kódová základňa bude fungovať v poriadku. Príklad úplného projektu, na ktorom je spustené toto nastavenie, je uvedený tu.

6. Ďalej SLF4J Preboha

SLF4J poskytuje ďalšie, ktoré môžu zefektívniť protokolovanie a čítať kód. Napríklad SLF4J poskytuje veľmi užitočné rozhranie pre prácu s parametrami:

Reťazcová premenná = "Hello John"; logger.debug ("Tlač hodnoty premennej: {}", premenná);

Tu je príklad kódu Log4j, ktorý robí to isté:

Reťazcová premenná = "Hello John"; logger.debug ("Tlač hodnoty premennej:" + premenná);

Ako vidíte, Log4j sa zreťazí Struny bez ohladu na ladiť úroveň je povolená alebo nie. V aplikáciách s vysokým zaťažením to môže spôsobiť problémy s výkonom. SLF4J sa zreťazí Struny iba keď ladiť úroveň je povolená. Ak chcete urobiť to isté s produktom Log4J, musíte si pridať ďalšie ak blok, ktorý skontroluje, či ladiť úroveň je povolená alebo nie:

Reťazcová premenná = "Hello John"; if (logger.isDebugEnabled ()) {logger.debug ("Tlač premennej:" + premenná); }

SLF4J štandardizoval úrovne protokolovania, ktoré sa líšia pre konkrétne implementácie. The FATÁLNE úroveň protokolovania klesla (bola zavedená v Log4j) na základe predpokladu, že v rámci protokolovania by sme nemali rozhodovať o tom, kedy by sa mala aplikácia ukončiť.

Použité úrovne protokolovania sú CHYBA, VAROVANIE, INFORMÁCIE, ODLUČENIE, KROK. Viac o ich použití sa dozviete v článku Úvod do protokolovania Java.

7. Záver

SLF4J pomáha pri tichom prepínaní medzi rámcami protokolovania. Je to jednoduché, ale flexibilné a umožňuje zlepšenie čitateľnosti a výkonu.

Ako obvykle, kód nájdete na GitHub. Okrem toho odkazujeme na dva ďalšie projekty venované rôznym článkom, ktoré však obsahujú diskutované konfigurácie protokolov, tu a tu.