Prijava u Spring Boot

1. Pregled

U ovom kratkom vodiču istražit ćemo glavne opcije bilježenja dostupne u Spring Boot-u.

Dublje informacije o prijavljivanju dostupne su u Vodiču za prijavljivanje, dok je Log4j2 predstavljen u uvodu u Log4j2 - dodaci, izgledi i filtri.

2. Početno postavljanje

Stvorimo prvo modul Spring Boot. Preporučeni način za to je korištenje Spring Initializr-a, koji opisujemo u našem vodiču za proljetno pokretanje.

Ajmo sada stvoriti našu jedinu datoteku klase, LoggingController:

@RestController javna klasa LoggingController {Logger logger = LoggerFactory.getLogger (LoggingController.class); @RequestMapping ("/") javni indeks niza () {logger.trace ("TRACE Message"); logger.debug ("DEBUG poruka"); logger.info ("INFO poruka"); logger.warn ("UPOZORENJA poruka"); logger.error ("ERROR Message"); return "Zdravo! Pogledajte zapisnike da biste vidjeli izlaz ..."; }} 

Nakon što smo učitali web aplikaciju, moći ćemo pokrenuti te linije za bilježenje jednostavnim posjetom // localhost: 8080 /.

3. Zapisivanje nulte konfiguracije

Spring Boot je vrlo koristan okvir. Omogućuje nam da zaboravimo na većinu konfiguracijskih postavki, od kojih se mnoge samopouzdano podešava.

U slučaju bilježenja, jedina obavezna ovisnost je Prijava Apache Commonsa.

Moramo ga uvesti samo kada koristimo Spring 4.x (Spring Boot 1.x) jer ga pruža Spring Framework proljeće-jcl modul u Spring 5 (Spring Boot 2.x).

Ne bismo se trebali brinuti oko uvoza proljeće-jcl uopće ako koristimo Spring Boot Starter (što mi gotovo uvijek i jesmo). To je zato što svaki početnik, poput našeg proljeće-boot-starter-web, ovisi o prijavljivanje proljetnog pokretanja, koja se već uvlači proljeće-jcl za nas.

3.1. Zadana prijava povratne prijave

Kada se koriste početnici, Povratak se koristi za prijavu prema zadanim postavkama.

Spring Boot unaprijed ga konfigurira uzorcima i ANSI bojama kako bi standardni izlaz bio čitljiviji.

Pokrenimo sada aplikaciju i posjetimo // localhost: 8080 / stranicu i pogledajte što se događa u konzoli:

Kao što vidimo, zadana razina zapisivanja Loggera je unaprijed postavljena na INFO, što znači da TRAG i DEBUG poruke nisu vidljive.

Da biste ih aktivirali bez promjene konfiguracije, možemo proći –Debug ili -trag argumenti na naredbenom retku:

java -jar target / spring-boot-logging-0.0.1-SNAPSHOT.jar --trace 

3.2. Razine dnevnika

Proljetni čizma također daje nam pristup preciznijoj postavci razine dnevnika putem varijabli okruženja. Postoji nekoliko načina na koje to možemo postići.

Prvo, možemo postaviti razinu zapisivanja unutar naših VM opcija:

-Dlogging.level.org.springframework = TRACE -Dlogging.level.com.baeldung = TRACE

Ako koristimo Maven, možemo definirajte naše postavke dnevnika putem naredbenog retka:

mvn spring-boot: run -Dspring-boot.run.arguments = - logging.level.org.springframework = TRACE, - logging.level.com.baeldung = TRACE

Kada radimo s Gradleom, postavke dnevnika možemo prenositi kroz naredbeni redak. To će zahtijevati postavljanje bootRun zadatak.

Kad to završimo, pokrećemo aplikaciju:

./gradlew bootRun -Pargs = - logging.level.org.springframework = TRACE, - logging.level.com.baeldung = TRACE

Ako želimo trajno promijeniti opširnost, to možemo učiniti u primjena.svojstva datoteka kao što je ovdje opisano:

logging.level.root = UPOZORENJE logging.level.com.baeldung = TRACE 

Napokon, možemo trajno promijenite razinu zapisivanja pomoću naše konfiguracijske datoteke okvira zapisivanja.

Spomenuli smo da Spring Boot Starter prema zadanim postavkama koristi Logback. Pogledajmo kako definirati fragment datoteke konfiguracije zabilježbe u kojoj smo postavili razinu za dva odvojena paketa:

Zapamti to ako je razina dnevnika za paket definirana više puta koristeći različite gore spomenute opcije, ali s različitim razinama dnevnika, koristit će se najniža razina.

Dakle, ako istodobno postavimo razine bilježenja koristeći varijable Logback, Spring Boot i okruženje, razina dnevnika bit će TRAG, jer je najniža među traženim razinama.

4. Zapisivanje konfiguracije zabilježbe

Iako je zadana konfiguracija korisna (na primjer, za početak u nuli tijekom POC-a ili brzih eksperimenata), to najvjerojatnije nije dovoljno za naše svakodnevne potrebe.

Da vidimo kako uključiti konfiguraciju prijave s drugom bojom i uzorkom bilježenja, s odvojenim specifikacijama za konzola i datoteka izlaz, i to s pristojnim valjanje politike kako bi se izbjeglo generiranje ogromnih datoteka dnevnika.

Prvo, trebali bismo pronaći rješenje koje omogućuje samo upravljanje našim postavkama bilježenja, umjesto onečišćenja application.properties, koja se obično koristi za mnoge druge postavke programa.

Kada datoteka u putu predavanja ima jedno od sljedećih imena, Spring Boot će je automatski učitati preko zadane konfiguracije:

  • logback-spring.xml
  • logback.xml
  • prijava-proljeće.groovy
  • prijava.groovy

Spring preporučuje upotrebu -Proljeće varijanta iznad običnih kad god je to moguće, kako je ovdje opisano.

Napišimo jednostavan logback-spring.xml:

      % crno (% d {ISO8601})% istaknuto (% - 5 nivo) [% plavo (% t)]% žuto (% C {1.}):% msg% n% bacanje $ {LOGS} / spring-boot- logger.log% d% p% C {1.} [% t]% m% n $ {LOGS} / archived / spring-boot-logger-% d {yyyy-MM-dd}.% i.log 10MB 

A kad pokrenemo aplikaciju, evo rezultata:

Kao što vidimo, sada se bilježi TRAG i DEBUG poruke, a cjelokupni uzorak konzole tekstualno je i kromatski drugačiji nego prije.

Također se sada zapisuje u datoteku u / trupci mapa stvorena pod trenutnom stazom i arhivira je kroz valjanu politiku.

5. Zapisivanje konfiguracije Log4j2

Iako je Apache Commons Logging srž, a Logback je referentna implementacija, sva usmjeravanja do ostalih knjižnica dnevnika već su uključena kako bi se olakšalo njihovo prebacivanje.

Međutim, da bismo koristili bilo koju knjižnicu dnevnika koja nije Logback, trebamo je izuzeti iz naših ovisnosti.

Za svaki početak poput ovog (jedini u našem primjeru, ali mogli bismo ih imati puno):

 org.springframework.boot spring-boot-starter-web 

moramo ga pretvoriti u mršavu verziju i (samo jednom) dodati našu alternativnu knjižnicu, ovdje kroz sam početak:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2 

U ovom trenutku moramo na put predavanja smjestiti datoteku koja se zove jedno od sljedećeg:

  • log4j2-spring.xml
  • log4j2.xml

Ispisat ćemo kroz Log4j2 (preko SLF4J) bez daljnjih izmjena.

Napišimo jednostavan log4j2-spring.xml:

        % d% p% C {1.} [% t]% m% n 

A kad pokrenemo aplikaciju, evo rezultata:

Kao što možemo vidjeti, izlaz se prilično razlikuje od onog za povratak - dokaz da sada u potpunosti koristimo Log4j2.

Uz XML konfiguraciju, Log4j2 nam omogućuje upotrebu i YAML ili JSON konfiguracije, ovdje opisane.

6. Log4j2 Bez SLF4J

Log4j2 također možemo koristiti izvorno, bez prolaska kroz SLF4J.

Da bismo to učinili, jednostavno koristimo matične razrede:

import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; // [...] Logger logger = LogManager.getLogger (LoggingController.class); 

Ne trebamo izvoditi bilo kakve druge izmjene standardne konfiguracije Spring Boot Log4j2.

Sada možemo iskoristiti potpuno nove značajke Log4j2, a da ne zapnemo uz staro sučelje SLF4J. Ali mi smo također vezani uz ovu implementaciju i morat ćemo prepisati naš kod prilikom prelaska na drugi okvir za evidentiranje.

7. Sječa s Lombokom

U primjerima koje smo vidjeli do sada smo morali proglasiti instancu logera iz našeg okvira za bilježenje.

Ovaj šifra uzorka može biti dosadna. To možemo izbjeći pomoću raznih bilješki koje je uveo Lombok.

Prvo ćemo trebati dodati ovisnost Lombok u našu skriptu za izgradnju kako bismo s njom radili:

 predviđen org.projectlombok lombok 1.18.4 

7.1. @ Slf4j i @CommonsLog

API-ji za prijavljivanje SLF4J i Apache Commons omogućuju nam fleksibilnost da promijenimo svoj okvir za evidentiranje bez utjecaja na naš kôd.

A mi možemo upotrijebite Lombokov @ Slf4j i @CommonsLog bilješke za dodavanje prave instance dnevnika u našu klasu: org.slf4j.Logger za SLF4J i org.apache.commons.logging.Prijava za prijavu Apache Commons.

Da bismo vidjeli ove bilješke na djelu, stvorimo klasu sličnu LoggingController ali bez instance logera. Nazvali smo ga kao LombokLoggingController i zabilježite ga s @ Slf4j:

@RestController @ Slf4j javna klasa LombokLoggingController {@RequestMapping ("/ lombok") javni indeks niza () {log.trace ("TRACE Message"); log.debug ("DEBUG poruka"); log.info ("INFO poruka"); log.warn ("UPOZORENJA poruka"); log.error ("ERROR Message"); return "Zdravo! Pogledajte zapisnike da biste vidjeli izlaz ..."; }}

Imajte na umu da smo isječak malo prilagodili pomoću zapisnik kao naš primjer dnevnika. To je zato što dodavanje napomene @ Slf4j automatski dodaje polje s imenom zapisnik.

S Zapisivanje nulte konfiguracije, aplikacija će koristiti temeljnu logback implementaciju evidentiranja za sječu drva. Slično tome, implementacija Log4j2 koristi se za bilježenje s Log4j2-Configuration Logging.

Dobivamo isto ponašanje kada zamjenjujemo napomenu @ Slf4j s @CommonsLog.

7.2. @ Log4j2

Možemo se poslužiti bilješkom @ Log4j2 za izravnu upotrebu Log4j2. Dakle, napravimo jednostavnu promjenu u LombokLoggingController koristiti @ Log4j2 umjesto @ Slf4j ili @CommonsLog:

@RestController @ Log4j2 javna klasa LombokLoggingController {@RequestMapping ("/ lombok") javni indeks niza () {log.trace ("TRACE Message"); log.debug ("DEBUG poruka"); log.info ("INFO poruka"); log.warn ("UPOZORENJA poruka"); log.error ("ERROR Message"); return "Zdravo! Pogledajte zapisnike da biste vidjeli izlaz ..."; }} 

Osim bilježenja, postoje i druge bilješke s Lomboka koje pomažu u održavanju našeg koda čistim i urednim. Više informacija o njima dostupno je u Uvodu u projekt Lombok, a imamo i vodič o postavljanju Lomboka s Eclipseom i IntelliJ-om.

8. Čuvajte se evidentiranja Java Util programa

Spring Boot također podržava JDK bilježenje putem sječa drva.svojstva konfiguracijska datoteka.

Postoje slučajevi kada to ipak nije dobra ideja. Iz dokumentacije:

Poznati su problemi s učitavanjem klasa s Java Util Logging koji uzrokuju probleme prilikom pokretanja iz 'izvršne staklenke'. Preporučujemo da ga izbjegavate kada trčite iz "izvršne staklenke" ako je ikako moguće.

Također je dobra praksa kada ručno izuzimate proljeće 4 zajedničko bilježenje u pom.xml, kako bi se izbjegli potencijalni sukobi između knjižnica dnevnika. Opruga 5 umjesto toga rukuje automatski, tako da ne trebamo ništa raditi kada koristimo Spring Boot 2.

9. JANSI na sustavu Windows

Iako operativni sustavi bazirani na Unixu, poput Linuxa i Mac OS X, prema zadanim postavkama podržavaju ANSI kodove boja, na Windows konzoli sve će nažalost biti jednobojno.

Windows može dobiti ANSI boje putem biblioteke JANSI.

Ipak bismo trebali obratiti pažnju na moguće nedostatke učitavanja klase.

Moramo ga uvesti i eksplicitno aktivirati u konfiguraciji kako slijedi:

Prijava:

  tačno [% nit]% istakni (% - 5 nivo)% cijan (% zapisnik {15}) -% msg% n 

Log4j2:

ANSI izlazne sekvence izvorno su podržane na mnogim platformama, ali nisu zadane na sustavu Windows. Da biste omogućili ANSI podršku, dodajte Jansi jar u našu aplikaciju i postavite svojstvo log4j.skipJansi do lažno. To omogućuje Log4j da koristi Jansi za dodavanje ANSI izlaznih kodova prilikom pisanja na konzolu.

Napomena: Prije Log4j 2.10, Jansi je bio omogućen prema zadanim postavkama. Činjenica da Jansi zahtijeva izvorni kod to znači Jansi se može učitati samo utovarivačem jedne klase. Za web aplikacije to znači Jansi tegla mora biti na putu predavanja web kontejnera. Da ne bi uzrokovao probleme web aplikacijama, Log4j više ne pokušava automatski učitati Jansi bez eksplicitne konfiguracije od Log4j 2.10 nadalje.

Također je vrijedno napomenuti:

  • Stranica dokumentacije izgleda sadrži korisne informacije o Log4j2 JANSI u istakni {uzorak} {stil} odjeljak.
  • Iako JANSI može obojiti izlaz, natpis Spring Boot (izvorni ili prilagođeni putem natpis.txt turpija) ostat će jednobojna.

10. Zaključak

Vidjeli smo glavne načine povezivanja s glavnim okvirima zapisivanja unutar projekta Spring Boot.

Također smo istražili glavne prednosti i zamke svakog rješenja.

Kao i uvijek, puni izvorni kod dostupan je na GitHub-u.