Uvod u Java prijavu
1. Pregled
Zapisivanje je moćna pomoć za razumijevanje i otklanjanje pogrešaka u izvršavanju programa. Dnevnici hvataju i zadržavaju važne podatke i čine ih dostupnima za analizu u bilo kojem trenutku.
Ovaj članak raspravlja o najpopularnijim Java prijamnim okvirima, Log4j 2 i Logback, zajedno s njihovim prethodnikom Log4j, te se ukratko dotiče SLF4J, fasade za bilježenje koja pruža zajedničko sučelje za različite okvire za bilježenje.
2. Omogućavanje evidentiranja
Svi okviri evidentiranja o kojima se raspravlja u članku dijele pojam zapisnika, dodataka i rasporeda. Omogućavanje zapisivanja unutar projekta slijedi tri uobičajena koraka:
- Dodavanje potrebnih knjižnica
- Konfiguracija
- Postavljanje izvoda iz dnevnika
Sljedeći odjeljci raspravljaju o koracima za svaki okvir pojedinačno.
3. Log4j 2
Log4j 2 je nova i poboljšana verzija Log4j okvira za evidentiranje. Najuvjerljivije poboljšanje je mogućnost asinkrone prijave. Log4j 2 zahtijeva sljedeće knjižnice:
org.apache.logging.log4j log4j-api 2.6.1 org.apache.logging.log4j log4j-core 2.6.1
Najnovija verzija log4j-api možete pronaći ovdje i log4j-jezgra - ovdje.
3.1. Konfiguracija
Konfiguriranje Log4j 2 temelji se na glavnoj konfiguraciji log4j.xml datoteka. Prvo što treba konfigurirati je dodavač.
Oni određuju kamo će poruka dnevnika biti usmjerena. Odredište može biti konzola, datoteka, utičnica itd.
Log4j 2 ima mnogo dodataka za različite svrhe, više informacija možete pronaći na službenim stranicama Log4j 2.
Pogledajmo jednostavan primjer konfiguracije:
Možete postaviti ime za svaki dodavač, na primjer, koristite ime konzola umjesto stdout.
Primijetite PatternLayout element - ovo određuje kako poruka treba izgledati. U našem primjeru obrazac se postavlja na temelju uzorak param, gdje % d određuje obrazac datuma, % p - izlaz razine dnevnika, % m - izlaz zabilježene poruke i % n - dodaje novi simbol crte. Više informacija o uzorku možete pronaći na službenoj stranici Log4j 2.
Napokon - kako bi se omogućio dodatak (ili višestruki) u koji ga morate dodati odjeljak:
3.2. Prijava u datoteku
Ponekad ćete trebati prijaviti datoteku, pa ćemo dodati fout prijavu u našu konfiguraciju:
% d {yyyy-MM-dd HH: mm: ss}% -5p% m% nw
The Datoteka appender ima nekoliko parametara koji se mogu konfigurirati:
- datoteka - određuje naziv datoteke dnevnika
- dodati - Zadana vrijednost za ovaj parametar je true, što znači da je po defaultu a Datoteka program za dodavanje dodati će se na postojeću datoteku i neće je skratiti.
- PatternLayout to je opisano u prethodnom primjeru.
Kako bi se omogućilo Datoteka dodatak u koji ga trebate dodati odjeljak:
3.3. Asinkrono bilježenje
Ako svoj Log4j 2 želite učiniti asinkronim, morate dodati LMAX ometačku knjižnicu u svoj pom.xml. LMAX ometač je biblioteka za komunikaciju bez niti bez zaključavanja.
Dodavanje ometača u pom.xml:
com.lmax ometač 3.3.4
Najnoviju verziju disruptor možete pronaći ovdje.
Ako želite koristiti LMAX disruptor, morate ga koristiti umjesto u vašoj konfiguraciji.
Ili možete omogućiti asinkrono bilježenje postavljanjem svojstva sustava Log4jContextSelector do org.apache.logging.log4j.core.async.AsyncLoggerContextSelector.
Možete naravno pročitati više o konfiguraciji Log4j2 async zapisovača i vidjeti neke dijagrame izvedbe na službenoj stranici Log4j2.
3.4. Upotreba
Slijedi jednostavan primjer koji pokazuje upotrebu Log4j za bilježenje:
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; javna klasa Log4jExample {private static Logger logger = LogManager.getLogger (Log4jExample.class); javna statička void glavna (String [] args) {logger.debug ("Debug log message"); logger.info ("Poruka dnevnika informacija"); logger.error ("Poruka dnevnika pogreške"); }}
Nakon pokretanja, aplikacija će prijaviti sljedeće poruke na konzolu i u datoteku s imenom baeldung.log:
2016-06-16 17:02:13 INFO Info poruka poruka dnevnika 2016-06-16 17:02:13 GREŠKA Poruka dnevnika pogreške
Ako nivo korijenskog dnevnika povisite na POGREŠKA:
Izlaz će izgledati ovako:
2016-06-16 17:02:13 POGREŠKA Poruka dnevnika pogreške
Kao što vidite, promjena razine dnevnika u gornji parametar uzrokuje da se poruke s nižom razinom dnevnika neće ispisati u dodatke.
Metoda drvosječa.pogreška se također može koristiti za bilježenje iznimke koja se dogodila:
probajte {// Ovdje se može izbaciti neka iznimka} catch (Exception e) {logger.error ("Poruka dnevnika pogreške", baciva); }
3.5. Konfiguracija razine paketa
Recimo da trebate prikazivati poruke na razini zapisnika TRACE - na primjer iz određenog paketa kao što je com.baeldung.log4j2:
logger.trace ("Trag log message");
Za sve ostale pakete želite nastaviti bilježiti samo INFO poruke.
Imajte na umu da je TRACE niži od nivoa korijenskog dnevnika INFO koji smo naveli u konfiguraciji.
Da biste omogućili prijavu samo za jedan od paketa, prije toga morate dodati sljedeći odjeljak vašem log4j.xml:
Omogućit će prijavu za com.baeldung.log4j paket i vaš će izlaz izgledati ovako:
2016-06-16 17:02:13 TRACE Trace log message 2016-06-16 17:02:13 DEBUG Debug log log message 2016-06-16 17:02:13 INFO Info log message 2016-06-16 17:02 : 13 POGREŠKA Poruka dnevnika pogreške
4. Prijavljivanje
Zapis je namijenjen poboljšanoj verziji Log4j, koju je razvio isti programer koji je izradio Log4j.
Logback također ima puno više značajki u usporedbi s Log4j, s tim da su mnoge od njih uvedene i u Log4j 2. Evo kratkog pregleda svih prednosti prijavljivanja na službenoj stranici.
Počnimo dodavanjem sljedeće ovisnosti na pom.xml:
ch.qos. logback prijava-klasična 1.1.7
Ova će ovisnost prijelazno povući još dvije ovisnosti, logback-core i slf4j-api. Imajte na umu da se najnovija verzija Logback-a nalazi ovdje.
4.1. Konfiguracija
Pogledajmo sada primjer konfiguracije prijave:
# Dodatak konzole # Uzorak poruke dnevnika za dodavač konzole% d {yyyy-MM-dd HH: mm: ss}% -5p% m% n # Dodatak datoteke baeldung.log false # Uzorak poruke dnevnika za dodavač datoteke% d { gggg-MM-dd HH: mm: ss}% -5p% m% n # Nadjači razinu dnevnika za navedeni paket
Zapis koristi SLF4J kao sučelje, tako da morate uvesti SLF4J Drvosječa i LoggerFactory.
4.2. SLF4J
SLF4J pruža zajedničko sučelje i apstrakciju za većinu Java prijamnih okvira. Djeluje kao fasada i pruža standardizirani API za pristup temeljnim značajkama okvira za bilježenje.
Logback koristi SLF4J kao izvorni API za svoju funkcionalnost. Slijedi primjer korištenja evidentiranja evidencije:
uvoz org.slf4j.Logger; uvoz org.slf4j.LoggerFactory; javna klasa Log4jExample {private static Logger logger = LoggerFactory.getLogger (Log4jExample.class); javna statička void glavna (String [] args) {logger.debug ("Debug log message"); logger.info ("Poruka dnevnika informacija"); logger.error ("Poruka dnevnika pogreške"); }}
Izlaz će ostati isti kao u prethodnim primjerima.
5. Log4J
Na kraju, pogledajmo časni log4j logging framework.
U ovom je trenutku to zastarjelo, ali vrijedno je rasprave jer postavlja temelje za njegove modernije nasljednike.
Mnogi detalji o konfiguraciji podudaraju se s onima o kojima se govori u odjeljku Log4j 2.
5.1. Konfiguracija
Prije svega, svojim projektima morate dodati knjižnicu Log4j pom.xml:
log4j log4j 1.2.17
Ovdje biste trebali biti u mogućnosti pronaći najnoviju verziju Log4j.
Pogledajmo cjelovit primjer jednostavne konfiguracije Log4j sa samo jednim dodavačem konzole:
je otvorena oznaka cijele konfiguracije koja ima jedno svojstvo - otklanjanje pogrešaka. Određuje želite li u zapisnike dodati informacije o otklanjanju pogrešaka Log4j.
5.2. Upotreba
Nakon što dodate Log4j knjižnicu i konfiguraciju, možete koristiti zapisnik u svom kodu. Pogledajmo jednostavan primjer:
import org.apache.log4j.Logger; javna klasa Log4jExample {private static Logger logger = Logger.getLogger (Log4jExample.class); javna statička void glavna (String [] args) {logger.debug ("Debug log message"); logger.info ("Poruka dnevnika informacija"); logger.error ("Poruka dnevnika pogreške"); }}
6. Zaključak
Ovaj članak prikazuje vrlo jednostavne primjere kako možete koristiti različite okvire zapisivanja, kao što su Log4j, Log4j2 i Logback. Obuhvaća jednostavne primjere konfiguracije za sve spomenute okvire.
Primjeri koji prate članak mogu se naći na GitHubu.