Uvod u SLF4J

1. Pregled

Jednostavna prijava fasada za Javu (skraćeno SLF4J) - djeluje kao fasada za različite okvire zapisivanja (npr. Java.util.logging, logback, Log4j). Nudi generički API čineći bilježenje neovisnim od stvarne implementacije.

To omogućuje koegzistenciju različitih okvira zapisivanja. Također pomaže u migraciji iz jednog okvira u drugi. Konačno, osim standardiziranog API-a, nudi i dio "sintaktičkog šećera".

Ovaj će se članak raspravljati o ovisnostima i konfiguraciji potrebnim za integraciju SLF4J s Log4j2, Logback, Log4J2 i Jakarta Commons Logging. Više o svakoj od ovih implementacija možete pročitati u članku Uvod u Java prijavu.

2.Postavljanje Log4j2

Da biste koristili SLF4J s Log4j2, trebali biste dodati sljedeće knjižnice 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 

Najnoviju verziju možete pronaći ovdje: log4j-api, log4j-core, log4j-slf4j-impl.

Stvarna konfiguracija zapisivanja pridržava se izvorne konfiguracije Log4j 2. Da vidimo kako Drvosječa stvorena je instanca:

javna klasa SLF4JExample {private static Logger logger = LoggerFactory.getLogger (SLF4JExample.class); javna statička void glavna (String [] args) {logger.debug ("Debug log message"); logger.info ("Poruka dnevnika informacija"); logger.error ("Poruka dnevnika pogreške"); }}

Imajte na umu da Drvosječa i LoggerFactory pripadaju org.slf4j paket. Primjer projekta koji se izvodi s objašnjenom konfiguracijom dostupan je ovdje.

3.Postavljanje prijave

Da biste koristili SLF4J s Logback-om, ne morate dodavati SLF4J u svoju stazu. Povratna prijava već koristi SLF4J. Smatra se referentnom provedbom. Trebamo uključiti samo knjižnicu za povratak:

 ch.qos. logback prijava-klasična 1.1.7 

Najnoviju verziju možete pronaći ovdje: logback-classic.

Konfiguracija je specifična za prijavu, ali bez problema radi sa SLF4J. Uz postavljene odgovarajuće ovisnosti i konfiguraciju, isti kôd iz prethodnih odjeljaka može se koristiti za obradu zapisnika.

4.Postavljanje Log4j

U prethodnim odjeljcima pokrili smo slučaj upotrebe u kojem SLF4J "sjedi" na vrhu određene implementacije evidentiranja. Ovako korišten, potpuno apstrahira temeljni okvir.

Postoje slučajevi kada se postojeće rješenje sječe ne može zamijeniti, na pr. zbog zahtjeva treće strane. To, međutim, ne znači da je projekt "osuđen" samo na već korišteni okvir.

SLF4J se može konfigurirati kao most, gdje se pozivi na postojeći okvir preusmjeravaju na njega. Dodajmo potrebne ovisnosti za stvaranje mosta za Log4j:

 org.slf4j log4j-over-slf4j 1.7.30 

S uspostavljenom ovisnošću (provjerite najnovije na log4j-over-slf4j), svi pozivi na Log4j bit će preusmjereni na SLF4J. Razmotrite službenu dokumentaciju da biste saznali više o premošćivanju postojećih okvira.

Baš kao i kod ostalih okvira, Log4j može poslužiti kao temeljna implementacija. Dodajmo potrebne ovisnosti:

 org.slf4j slf4j-log4j12 1.7.30 log4j log4j 1.2.17 

Najnoviju verziju možete pronaći ovdje za slf4j-log4j12 i log4j. Uzoran projekt, konfiguriran na objašnjeni način, dostupan je ovdje.

5.Postavljanje JCL mosta

U prethodnim odjeljcima pokazali smo kako se ista baza koda može koristiti za podršku zapisivanju pomoću različitih implementacija. Iako je ovo glavno obećanje i snaga SLF4J, to je i cilj iza JCL-a (Jakarta Commons Logging ili Apache Commons Logging).

JCL je po svojim namjerama okvir sličan SLF4J. Glavna razlika je u tome što JCL rješava osnovnu implementaciju tijekom vremena izvršavanja putem sustava za učitavanje klase. Ovaj pristup smatra se problematičnim u slučajevima kada su u igri prilagođeni učitelji učitelja.

SLF4J rješava svoje vezove u vrijeme prevođenja. Smatra se jednostavnijim, ali dovoljno snažnim.

Srećom, dva okvira mogu raditi zajedno u načinu mosta:

 org.slf4j jcl-over-slf4j 1.7.30 

Najnoviju verziju ovisnosti možete pronaći ovdje jcl-over-slf4j.

Kao i u ostalim slučajevima, ista će se baza koda izvrsno izvoditi. Primjer cjelovitog projekta koji izvodi ovo postavljanje dostupan je ovdje.

6. Unaprijediti SLF4J Bože

SLF4J pruža dodatke koji mogu učiniti evidentiranje učinkovitijim i kôd čitljivijim. Na primjer, SLF4J pruža vrlo korisno sučelje za rad s parametrima:

Niz varijabla = "Zdravo John"; logger.debug ("Ispis vrijednosti varijable: {}", varijabla);

Evo primjera koda za Log4j koji radi istu stvar:

Niz varijabla = "Zdravo John"; logger.debug ("Ispis vrijednosti varijable:" + varijabla);

Kao što vidite, Log4j će se spojiti Žice bez obzira na otklanjanje pogrešaka razina je omogućena ili ne. U aplikacijama s velikim opterećenjem to može uzrokovati probleme s izvedbom. SLF4J će se spojiti Žice samo kad otklanjanje pogrešaka razina je omogućena. Da biste učinili isto s Log4J, morate dodati još ako blok koji će provjeriti je li otklanjanje pogrešaka razina je omogućena ili ne:

Niz varijabla = "Zdravo John"; if (logger.isDebugEnabled ()) {logger.debug ("Ispis vrijednosti varijable:" + varijabla); }

SLF4J standardizirao je razine bilježenja koje se razlikuju za pojedine implementacije. The FATALNO razina zapisivanja opala je (uvedena je u Log4j) na temelju pretpostavke da u okviru zapisivanja ne bismo trebali odlučivati ​​kada treba ukinuti aplikaciju.

Korištene razine zapisivanja su POGREŠKA, UPOZORENJE, INFO, DEBUG, TRACE. Više o njihovom korištenju možete pročitati u članku Uvod u Java zapisivanje.

7. Zaključak

SLF4J pomaže kod tihog prebacivanja između okvira za bilježenje. Jednostavan je, ali fleksibilan i omogućuje čitljivost i poboljšanje performansi.

Kao i obično, kod se može naći na GitHubu. Uz to, ovdje i ovdje navodimo dva druga projekta posvećena različitim člancima, ali koji sadrže raspravljene konfiguracije dnevnika.