Prihlasovanie do Spring Boot

1. Prehľad

V tomto krátkom tutoriáli preskúmame hlavné možnosti protokolovania dostupné v Spring Boot.

Podrobnejšie informácie o protokole Logback sú k dispozícii v Sprievodcovi protokolom, zatiaľ čo program Log4j2 je predstavený v úvode do programu Log4j2 - prílohy, rozloženia a filtre.

2. Počiatočné nastavenie

Najprv si vytvoríme modul Spring Boot. Odporúčaným spôsobom je použitie nástroja Spring Initializr, ktorému sa venujeme v našom návode Spring Boot.

Teraz vytvorme náš jediný súbor triedy, LoggingController:

@RestController verejná trieda LoggingController {Logger logger = LoggerFactory.getLogger (LoggingController.class); @RequestMapping ("/") public String index () {logger.trace ("TRASOVÁ správa"); logger.debug ("DEBUGOVÁ správa"); logger.info ("INFO správa"); logger.warn ("VAROVNÁ správa"); logger.error ("CHYBOVÁ správa"); návrat "Ahoj! Pozrite sa na protokoly, aby ste videli výstup ..."; }} 

Po načítaní webovej aplikácie budeme môcť tieto riadky prihlásenia spustiť jednoduchou návštevou // localhost: 8080 /.

3. Protokol nulovej konfigurácie

Spring Boot je veľmi užitočný rámec. Umožňuje nám to zabudnúť na väčšinu konfiguračných nastavení, z ktorých mnohé sa údajne ladia automaticky.

V prípade ťažby dreva je jedinou povinnou závislosťou Prihlásenie Apache Commons.

Musíme ho importovať, iba ak používate Spring 4.x (Spring Boot 1.x), pretože ho poskytuje Spring Framework jar-jcl modul v pružine 5 (Spring Boot 2.x).

S dovozom by sme si nemali robiť starosti jar-jcl vôbec, ak používame Spring Boot Starter (čo sme takmer vždy). Je to preto, že každý štartér, ako ten náš spring-boot-starter-web, záleží na protokolovanie štartéra pružiny, štartéra, ktorý sa už vtiahne jar-jcl pre nás.

3.1. Predvolené protokolovanie prihlásenia

Pri použití štartérov sa na prihlásenie predvolene používa Logback.

Spring Boot ho predkonfiguruje pomocou vzorov a farieb ANSI, aby bol štandardný výstup čitateľnejší.

Teraz spustíme aplikáciu a navštívime stránku // localhost: 8080 / stránke a uvidíte, čo sa stane v konzole:

Ako vidíme, predvolená úroveň protokolovania Loggeru je prednastavená na INFO, čo znamená TRACE a DEBUG správy nie sú viditeľné.

Ak ich chcete aktivovať bez zmeny konfigurácie, môžeme prejsť –Debug alebo –Stopovať argumenty na príkazovom riadku:

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

3.2. Úrovne denníka

Spring Boot tiež nám umožňuje prístup k jemnejšie nastavenej úrovni protokolu pomocou premenných prostredia. Existuje niekoľko spôsobov, ako to môžeme dosiahnuť.

Najskôr môžeme nastaviť našu úroveň protokolovania v rámci našich možností VM:

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

Prípadne, ak používame Maven, môžeme definujte naše nastavenia protokolu pomocou príkazového riadku:

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

Pri práci s Gradle môžeme nastavenia protokolu odovzdať cez príkazový riadok. Bude to vyžadovať nastavenie bootRun úloha.

Po dokončení spustíme aplikáciu:

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

Ak chceme natrvalo zmeniť výrečnosť, môžeme tak urobiť v application.properties súbor, ako je popísané tu:

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

Nakoniec môžeme trvale zmeniť úroveň protokolovania pomocou nášho konfiguračného súboru rámca protokolovania.

Spomenuli sme, že Spring Boot Starter štandardne používa Logback. Pozrime sa, ako definovať fragment konfiguračného súboru Logback, v ktorom sme nastavili úroveň pre dva samostatné balíčky:

Zapamätaj si to ak je úroveň protokolu pre balík definovaná viackrát pomocou rôznych možností uvedených vyššie, ale s rôznymi úrovňami denníka sa použije najnižšia úroveň.

Takže ak nastavíme úrovne protokolovania pomocou premenných Logback, Spring Boot a prostredia súčasne, úroveň protokolu bude TRACE, pretože je najnižšia z požadovaných úrovní.

4. Protokolovanie konfigurácie prihlásenia

Aj keď je predvolená konfigurácia užitočná (napríklad na začatie v nulovom čase počas POC alebo rýchlych experimentov), ​​s najväčšou pravdepodobnosťou nestačí na naše každodenné potreby.

Pozrime sa ako zahrnúť konfiguráciu Logback s inou farbou a vzorkou ťažby, so samostatnými špecifikáciami pre konzola a spis výstupom, a so slušným priebežná politika aby sa zabránilo generovaniu obrovských súborov denníka.

Najskôr by sme mali nájsť riešenie, ktoré umožní namiesto znečisťovania zaobchádzať iba s našimi nastaveniami protokolovania application.properties, ktorý sa bežne používa v mnohých ďalších nastaveniach aplikácií.

Keď má súbor v triede cesty jeden z nasledujúcich názvov, Spring Boot ho automaticky načíta nad predvolenou konfiguráciou:

  • logback-spring.xml
  • logback.xml
  • logback-spring.groovy
  • logback.groovy

Jar odporúča použiť -jar varianta cez obyčajné, kedykoľvek je to možné, ako je to popísané tu.

Poďme napísať jednoduchý logback-spring.xml:

      % čierna (% d {ISO8601})% zvýraznenie (% - 5úroveň) [% modrá (% t)]% žltá (% C {1.}):% msg% n% hoditeľné $ {LOGS} / spring-boot- logger.log% d% p% C {1.} [% t]% m% n $ {LOGS} / archivované / spring-boot-logger-% d {rrrr-MM-dd}.% i.log 10 MB 

A keď spustíme aplikáciu, tu je výstup:

Ako vidíme, teraz sa prihlási TRACE a DEBUG správy a celkový vzor konzoly sa líši textovo aj chromaticky ako predtým.

Teraz sa tiež prihlási do súboru v a / protokoly priečinok vytvorený pod aktuálnou cestou a archivuje ho prostredníctvom postupnej politiky.

5. Protokolovanie konfigurácie Log4j2

Aj keď je Apache Commons Logging v jadre a Logback je poskytovaná referenčná implementácia, všetky smerovania do ostatných knižníc protokolovania sú už zahrnuté, aby bolo ľahké na ne prepnúť.

Aby sme mohli používať inú protokolovú knižnicu ako Logback, musíme ju vylúčiť z našich závislostí.

Pre každého štartéra, ako je tento (je to jediný v našom príklade, ale mohli by sme ich mať veľa):

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

musíme ju zmeniť na chudú verziu a (iba raz) pridať našu alternatívnu knižnicu, tu prostredníctvom samotného štartéra:

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

V tomto okamihu musíme do cesty triedy umiestniť súbor s názvom jeden z nasledujúcich:

  • log4j2-spring.xml
  • log4j2.xml

Budeme tlačiť cez Log4j2 (cez SLF4J) bez ďalších úprav.

Poďme napísať jednoduchý log4j2-spring.xml:

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

A keď spustíme aplikáciu, tu je výstup:

Ako vidíme, výstup sa dosť líši od výstupu Logback - dôkaz, že teraz plne využívame Log4j2.

Okrem konfigurácie XML nám Log4j2 umožňuje používať aj tu popísanú konfiguráciu YAML alebo JSON.

6. Log4j2 Bez SLF4J

Log4j2 môžeme použiť aj natívne, bez prechodu cez SLF4J.

Aby sme to dosiahli, jednoducho použijeme natívne triedy:

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

Štandardnú konfiguráciu Log4j2 Spring Boot nemusíme nijako upravovať.

Teraz môžeme využívať úplne nové funkcie Log4j2 bez toho, aby sme sa zasekli v starom rozhraní SLF4J. Sme však viazaní aj na túto implementáciu a pri prechode na iný rámec protokolovania budeme musieť prepísať náš kód.

7. Prihlásenie pomocou Lomboku

V príkladoch, ktoré sme videli doteraz sme museli deklarovať inštanciu loggeru z nášho rámca ťažby dreva.

Tento štandardný kód môže byť nepríjemný. Môžeme sa mu vyhnúť pomocou rôznych anotácií, ktoré predstavil Lombok.

Najprv budeme musieť do nášho skriptu na zostavenie pridať závislosť Lombok:

 org.projectlombok lombok 1.18.4 poskytnuté 

7.1. @ Slf4j a @CommonsLog

SLF4J a Apache Commons Logging API nám umožňujú flexibilitu meniť náš rámec protokolovania bez dopadu na náš kód.

A môžeme použite Lombok @ Slf4j a @CommonsLog anotácie pridať do našej triedy správnu inštanciu záznamníka: org.slf4j.Logger pre SLF4J a org.apache.commons.logging.Log pre protokolovanie Apache Commons.

Ak chcete vidieť tieto anotácie v akcii, vytvorme triedu podobnú LoggingController ale bez inštancie záznamníka. Pomenujeme to ako LombokLoggingController a anotovať to @ Slf4j:

@RestController @ Slf4j verejná trieda LombokLoggingController {@RequestMapping ("/ lombok") public String index () {log.trace ("A TRACE Message"); log.debug ("DEBUGOVÁ správa"); log.info ("INFO správa"); log.warn ("VAROVNÁ správa"); log.error ("CHYBOVÁ správa"); návrat "Ahoj! Pozrite sa na protokoly, aby ste videli výstup ..."; }}

Upozorňujeme, že úryvok sme upravili len trochu, pomocou log ako naša inštancia protokolovača. Je to tak kvôli pridaniu anotácie @ Slf4j automaticky pridá pole s názvom log.

S Protokolovanie nulovej konfigurácie, aplikácia použije základnú implementáciu protokolovania Logback na ťažbu dreva. Podobne sa implementácia Log4j2 používa na protokolovanie s protokolom konfigurácie Log4j2.

Rovnaké správanie sa prejaví aj pri nahradení anotácie @ Slf4j s @CommonsLog.

7.2. @ Log4j2

Môžeme použiť anotáciu @ Log4j2 používať Log4j2 priamo. Takže urobíme jednoduchú zmenu v LombokLoggingController použit @ Log4j2 namiesto @ Slf4j alebo @CommonsLog:

@RestController @ Log4j2 verejná trieda LombokLoggingController {@RequestMapping ("/ lombok") public String index () {log.trace ("A TRACE Message"); log.debug ("DEBUGOVÁ správa"); log.info ("INFO správa"); log.warn ("VAROVNÁ správa"); log.error ("CHYBOVÁ správa"); návrat "Ahoj! Pozrite sa na protokoly, aby ste videli výstup ..."; }} 

Okrem protokolovania existujú ďalšie anotácie z Lomboku, ktoré pomáhajú udržiavať náš kód čistý a upravený. Viac informácií o nich je k dispozícii v časti Úvod do projektu Lombok a máme tu aj návod na nastavenie Lomboku pomocou Eclipse a IntelliJ.

8. Pozor na protokolovanie Java Util

Spring Boot podporuje aj protokolovanie JDK prostredníctvom servera logovanie.vlastnosti konfiguračný súbor.

Existujú prípady, kedy to nie je dobrý nápad použiť. Z dokumentácie:

Pri protokolovaní Java Util Logging sú známe problémy s načítaním, ktoré spôsobujú problémy pri spustení z „spustiteľného súboru“. Ak je to možné, odporúčame vám vyhnúť sa mu pri spustení zo „spustiteľného balíka“.

Je tiež dobrým zvykom, keď používate jar 4 na manuálne vylúčenie spoločná ťažba dreva v pom.xml, aby sa zabránilo možným stretom medzi knižnicami protokolovania. Jar 5 to miesto toho rieši automaticky, takže keď používame Spring Boot 2, nemusíme nič robiť.

9. JANSI vo Windows

Zatiaľ čo operačné systémy založené na Unixe, ako sú Linux a Mac OS X, štandardne podporujú farebné kódy ANSI, v konzole Windows bude všetko smutne monochromatické.

Windows môže získať farby ANSI prostredníctvom knižnice s názvom JANSI.

Mali by sme však venovať pozornosť možným nevýhodám načítania triedy.

Musíme ho importovať a explicitne aktivovať v konfigurácii nasledovne:

Prihlásenie:

  true [% thread]% highlight (% - 5level)% cyan (% logger {15}) -% msg% n 

Log4j2:

Sekvencie escape ANSI sú natívne podporované na mnohých platformách, ale nie sú predvolene dostupné v systéme Windows. Ak chcete povoliť podporu ANSI, pridajte do našej aplikácie jar Jansi a nastavte vlastnosť log4j.skipJansi do nepravdivé. To umožňuje spoločnosti Log4j použiť Jansi na pridanie únikových kódov ANSI pri zápise do konzoly.

Poznámka: Pred verziou Log4j 2.10 bola funkcia Jansi predvolene povolená. To, že Jansi vyžaduje natívny kód, to znamená Jansi je možné načítať iba nakladačom jednej triedy. Pre webové aplikácie to znamená nádoba Jansi musí byť v triede webového kontajnera. Aby sa predišlo problémom s webovými aplikáciami, Log4j sa už nepokúša automaticky načítať Jansi bez explicitnej konfigurácie od verzie Log4j 2.10.

Je tiež potrebné poznamenať:

  • Stránka dokumentácie rozloženia obsahuje užitočné informácie Log4j2 JANSI v zvýrazniť {pattern} {style} oddiel.
  • Zatiaľ čo JANSI môže vyfarbiť výstup, Spring Boot's Banner (natívny alebo upravený prostredníctvom banner.txt súbor) zostane monochromatický.

10. Záver

Videli sme hlavné spôsoby prepojenia s hlavnými protokolovými rámcami v rámci projektu Spring Boot.

Preskúmali sme tiež hlavné výhody a úskalia každého riešenia.

Celý zdrojový kód je ako vždy k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found