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.