Bevezetés az SLF4J-be

1. Áttekintés

Simple Logging Facade for Java (rövidítve SLF4J) - a különböző naplózási keretek homlokzataként működik (pl. Java.util.logging, logback, Log4j). Egy általános API-t kínál, amely a naplózást függetleníti a tényleges megvalósítástól.

Ez lehetővé teszi a különböző naplózási keretek egymás mellett élését. Ez segít az egyik keretrendszerből a másikba való áttérésben is. Végül a szabványosított API-n kívül „szintaktikus cukrot” is kínál.

Ez a cikk az SLF4J Log4j2, Logback, Log4J2 és Jakarta Commons naplózással történő integrálásához szükséges függőségeket és konfigurációt tárgyalja. A megvalósításokról bővebben a Java naplózás bemutatása című cikkben olvashat.

2.A Log4j2 telepítése

Az SLF4J és Log4j2 együttes használatához adja hozzá a következő könyvtárakat pom.xml:

 org.apache.logging.log4j log4j-api 2.7 org.apache.logging.log4j log4j-core 2.7 org.apache.logging.log4j log4j-slf4j-impl 2.7 

A legfrissebb verzió itt található: log4j-api, log4j-core, log4j-slf4j-impl.

A tényleges naplózási konfiguráció megfelel a natív Log4j 2 konfigurációnak. Lássuk, hogyan Logger a példány létrejön:

public class SLF4JExample {private static Logger logger = LoggerFactory.getLogger (SLF4JExample.class); public static void main (String [] args) {logger.debug ("Hibakeresési naplóüzenet"); logger.info ("Info napló üzenet"); logger.error ("Hiba napló üzenet"); }}

Vegye figyelembe, hogy a Logger és LoggerFactory a org.slf4j csomag. Itt található egy példa egy projektre, amely a magyarázott konfigurációval fut.

3.A Visszaállítás beállítása

Az SLF4J visszalépéshez való használatához nem kell hozzáadni az SLF4J-t az osztályútvonalához. A bejelentkezés már az SLF4J-t használja. Referencia-megvalósításnak számít. Csak a Logback könyvtárat kell felvennünk:

 ch.qos.logback logback-classic 1.1.7 

A legújabb verzió itt található: logback-classic.

A konfiguráció Logback-specifikus, de az SLF4J-vel zökkenőmentesen működik. A megfelelő függőségek és konfiguráció megléte esetén az előző szakaszok ugyanazon kódja használható a naplózás kezelésére.

4.A Log4j telepítése

Az előző szakaszokban egy olyan felhasználási esetet ismertettünk, amikor az SLF4J „ül” az adott naplózási megvalósítás tetején. Így használva teljesen elvonja a mögöttes keretet.

Vannak esetek, amikor egy meglévő naplózási megoldást nem lehet pótolni pl. harmadik fél követelményei miatt. Ez azonban nem jelenti azt, hogy a projektet csak a már használt keretrendszerre „ítélik”.

Az SLF4J hídként konfigurálható, ahol a meglévő keretrendszerre irányuló hívások átirányításra kerülnek. Adjuk hozzá a szükséges függőségeket a híd létrehozásához a Log4j számára:

 org.slf4j log4j-over-slf4j 1.7.30 

Ha a függőség megvan (ellenőrizze a legújabbat a log4j-over-slf4j oldalon), akkor a Log4j összes hívása átirányításra kerül az SLF4J-re. Vegye figyelembe a hivatalos dokumentációt, hogy többet tudjon meg a meglévő keretrendszerek áthidalásáról.

Csakúgy, mint a többi keretrendszer esetében, a Log4j is mögöttes megvalósításként szolgálhat. Adjuk hozzá a szükséges függőségeket:

 org.slf4j slf4j-log4j12 1.7.30 log4j log4j 1.2.17 

A slf4j-log4j12 és a log4j legújabb verziója itt található. A bemutatott módon konfigurált példaértékű projekt itt érhető el.

5.JCL Bridge beállítása

Az előző szakaszokban megmutattuk, hogy ugyanaz a kódbázis hogyan használható a különböző megvalósításokkal történő naplózás támogatására. Bár ez az SLF4J legfőbb ígérete és erőssége, a JCL (Jakarta Commons Logging vagy Apache Commons Logging) mögött is ez a cél.

A JCL szándéka szerint az SLF4J-hez hasonló keret. A fő különbség az, hogy a JCL megoldja az alapul szolgáló megvalósítást a végrehajtás ideje alatt egy osztályterhelési rendszeren keresztül. Ezt a megközelítést problematikusnak tartják azokban az esetekben, amikor egyéni osztálytervezők játszanak.

Az SLF4J a fordítás idején oldja meg a kötéseit. Egyszerűbbnek, mégis elég erősnek érzékelték.

Szerencsére két keret működhet együtt a híd módban:

 org.slf4j jcl-over-slf4j 1.7.30 

A legfrissebb függőségi verzió itt található: jcl-over-slf4j.

Csakúgy, mint a többi esetben, ugyanaz a kódbázis remekül fog működni. Itt található egy példa egy teljes projektre, amely futtatja ezt a beállítást.

6. További SLF4J Jóság

Az SLF4J további szolgáltatásokat kínál, amelyek hatékonyabbá tehetik a naplózást és olvashatóbbá teszik a kódot. Például az SLF4J nagyon hasznos felületet biztosít a paraméterekkel való munkához:

String változó = "Hello John"; logger.debug ("Változóérték nyomtatása: {}", változó);

Itt van a Log4j kódpéldája, amely ugyanazt csinálja:

String változó = "Hello John"; logger.debug ("Változóérték nyomtatása:" + változó);

Amint láthatja, a Log4j összefűz Húrok függetlenül attól hibakeresés szint engedélyezve vagy sem. Nagy terhelésű alkalmazásoknál ez teljesítményproblémákat okozhat. Az SLF4J összefűz Húrok csak akkor, ha a hibakeresés szint engedélyezve van. Ahhoz, hogy ugyanezt tegye a Log4J-vel, külön kell hozzáadnia ha blokk, amely ellenőrzi, hogy hibakeresés szint engedélyezve vagy sem:

String változó = "Hello John"; if (logger.isDebugEnabled ()) {logger.debug ("Változóérték nyomtatása:" + változó); }

Az SLF4J egységesítette a naplózási szinteket, amelyek az egyes megvalósításoknál eltérőek. A HALÁLOS a naplózási szint esett (a Log4j-ben vezették be) annak az előfeltevésnek az alapján, hogy egy naplózási keretrendszerben nem szabad eldöntenünk, hogy mikor kell egy alkalmazást leállítani.

Az alkalmazott naplózási szintek a következők HIBA, FIGYELMEZTETÉS, INFORMÁCIÓ, HIBÁK, NYOMON KÖVETÉS. A használatukról a Bevezetés a Java naplózásba című cikkben olvashat.

7. Következtetés

Az SLF4J segít a naplózási keretek közötti csendes váltásban. Ez egyszerű, ugyanakkor rugalmas, és lehetővé teszi az olvashatóság és a teljesítmény javítását.

Szokás szerint a kód megtalálható a GitHubon. Ezenkívül két másik, különféle cikkeknek szentelt, de megvitatott naplókonfigurációkat tartalmazó projektet is hivatkozunk itt és itt.