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:

  1. Dodavanje potrebnih knjižnica
  2. Konfiguracija
  3. 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.