Bejelentkezés a tavaszi csomagtartóba

1. Áttekintés

Ebben a rövid bemutatóban a Spring Boot alkalmazásban elérhető főbb naplózási lehetőségeket tárjuk fel.

A Logbackről részletesebb információk találhatók az A Guide to Logback-ben, míg a Log4j2 az Intro to Log4j2 - Függelékek, Elrendezések és Szűrők című részben található.

2. Kezdeti beállítás

Először hozzunk létre egy Spring Boot modult. Ennek ajánlott módja a Spring Initializr használata, amelyet a tavaszi indítási útmutatónkban ismertetünk.

Most hozzuk létre az egyetlen osztályfájlt, LoggingController:

@RestController public class LoggingController {Logger logger = LoggerFactory.getLogger (LoggingController.class); @RequestMapping ("/") public String index () {logger.trace ("A TRACE üzenet"); logger.debug ("DEBUG üzenet"); logger.info ("INFO üzenet"); logger.warn ("WARN üzenet"); logger.error ("ERROR üzenet"); return "Howdy! Nézze meg a naplókat a kimenet megtekintéséhez ..."; }} 

Miután betöltöttük a webalkalmazást, egyszerûen meglátogathatjuk ezeket a naplózási sorokat // localhost: 8080 /.

3. Nulla konfigurációs naplózás

A Spring Boot egy nagyon hasznos keret. Lehetővé teszi számunkra, hogy megfeledkezzünk a konfigurációs beállítások többségéről, amelyek közül sok véleménnyel automatikusan hangolódik.

Naplózás esetén az egyetlen kötelező függőség az Apache Commons naplózása.

Csak a 4.x (Spring Boot 1.x) használatakor kell importálnunk, mivel a Spring Framework biztosítja tavasz-jcl modul az 5. tavaszban (Spring Boot 2.x).

Az importálás miatt nem kell aggódnunk tavasz-jcl egyáltalán, ha a Spring Boot Starter-t használjuk (amik szinte mindig vagyunk). Ez azért van, mert minden kezdő, akárcsak mi tavasz-boot-starter-web, attól függ tavaszi-csomagtartó-indító-naplózás, ami már behúzza tavasz-jcl nekünk.

3.1. Alapértelmezett bejelentkezési naplózás

Indítók használata esetén a Logback alapértelmezés szerint naplózásra szolgál.

A Spring Boot előre konfigurálja mintákkal és ANSI színekkel, hogy a standard kimenet olvashatóbb legyen.

Futtassuk most az alkalmazást, és keressük fel a // localhost: 8080 / oldalon, és nézze meg, mi történik a konzolon:

Ahogy látjuk, a Napló alapértelmezett naplózási szintje INFO-ra van állítva, ami azt jelenti NYOM és HIBÁK üzenetek nem láthatók.

A konfiguráció megváltoztatása nélküli aktiválásukhoz átadhatjuk a –Debug vagy -nyom argumentumok a parancssorban:

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

3.2. Naplószintek

Tavaszi Csizma is környezeti változókon keresztül hozzáférhetünk egy finomabb naplózási szint beállításhoz. Ezt többféleképpen is elérhetjük.

Először a naplózási szintet állíthatjuk be a virtuális gép beállításai között:

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

Alternatív megoldásként, ha Mavenet használjuk, akkor megtehetjük definiálja a naplóbeállításainkat a parancssoron keresztül:

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

Amikor a Gradle-lel dolgozunk, átadhatjuk a naplóbeállításokat a parancssoron keresztül. Ehhez a bootRun feladat.

Miután ez megtörtént, futtatjuk az alkalmazást:

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

Ha véglegesen meg akarjuk változtatni a bőbeszédet, akkor ezt megtehetjük a alkalmazás.tulajdonságok fájl az itt leírtak szerint:

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

Végül megtehetjük a naplózási szintet a naplózási keretrendszer konfigurációs fájljának segítségével véglegesen megváltoztathatja.

Megemlítettük, hogy a Spring Boot Starter alapértelmezés szerint a Logback szolgáltatást használja. Nézzük meg, hogyan definiálhatunk egy olyan Logback konfigurációs fájl töredékét, amelyben két külön csomag szintjét állítjuk be:

Emlékezz arra ha egy csomag naplózási szintjét többször definiáljuk a fent említett különböző lehetőségek használatával, de különböző log szintekkel a legalacsonyabb szintet fogják használni.

Tehát, ha a naplózási szinteket egyidejűleg a Logback, a Spring Boot és a környezeti változókkal állítjuk be, a naplószint NYOM, mivel a legalacsonyabb a kért szintek között.

4. Logback konfigurációs naplózás

Annak ellenére, hogy az alapértelmezett konfiguráció hasznos (például a POC-k vagy a gyors kísérletek során nulla idő alatt kell elindulni), ez valószínűleg nem elég a napi szükségleteinkhez.

Lássuk hogyan kell beépíteni a Logback konfigurációt más színnel és fakitermelési mintával, külön specifikációkkal a konzol és fájl kimenettel, és tisztességes gördülő politika hogy elkerülje a hatalmas naplófájlok létrehozását.

Először is meg kell találnunk egy megoldást, amely lehetővé teszi a naplózási beállítások egyedüli kezelését a szennyezés helyett application.properties, amelyet általában sok más alkalmazásbeállításhoz használnak.

Ha egy osztálypályán lévő fájlnak az alábbi nevek valamelyike ​​van, a Spring Boot automatikusan betöltötte az alapértelmezett konfiguráció felett:

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

Spring javasolja a -tavaszi változat lehetőség szerint a simaakon, az itt leírtak szerint.

Írjunk egy egyszerűt logback-spring.xml:

      % fekete (% d {ISO8601})% kiemelés (% - 5szint) [% kék (% t)]% sárga (% C {1.}):% msg% n% dobható $ {LOGS} / rugós-boot- logger.log% d% p% C {1.} [% t]% m% n $ {LOGS} / archivált / spring-boot-logger-% d {yyyy-MM-dd}.% i.log 10 MB 

És amikor futtatjuk az alkalmazást, itt van a kimenet:

Mint láthatjuk, most naplóz NYOM és HIBÁK üzeneteket, és a konzol általános mintázata mind szövegileg, mind kromatikusan eltér a korábbiaktól.

Mostantól egy a. Fájlba is bejelentkezik / naplók az aktuális elérési út alatt létrehozott mappa, és egy gördülő házirend segítségével archiválja.

5. Log4j2 konfigurációs naplózás

Míg az Apache Commons naplózása áll a középpontban, és a Logback a referencia megvalósítás, a többi naplókönyvtárba irányuló összes útvonal már benne van, hogy megkönnyítse a váltást.

Annak érdekében, hogy a Logbacken kívül más naplókönyvtárat használhassunk, ki kell zárnunk azt a függőségeink közül.

Minden ilyen kezdő számára (példánkban ez az egyetlen, de sokan lehetnek):

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

egy vékony verzióvá kell alakítanunk, és (csak egyszer) hozzá kell adnunk alternatív könyvtárunkat, itt magától az indítón keresztül:

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

Ezen a ponton a classpath-ba kell helyeznünk egy fájlt, amelynek neve a következő:

  • log4j2-spring.xml
  • log4j2.xml

A Log4j2-n keresztül (SLF4J-n keresztül) nyomtatunk további módosítások nélkül.

Írjunk egy egyszerűt log4j2-spring.xml:

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

És amikor futtatjuk az alkalmazást, itt van a kimenet:

Mint láthatjuk, a kimenet egészen más, mint a Logbacké - ez bizonyítja, hogy most már teljes mértékben használjuk a Log4j2-t.

Az XML konfiguráció mellett a Log4j2 lehetővé teszi számunkra az itt leírt YAML vagy JSON konfiguráció használatát is.

6. Log4j2 SLF4J nélkül

A Log4j2-t natív módon is használhatjuk, anélkül, hogy áthaladnánk az SLF4J-n.

Ennek érdekében egyszerűen a natív osztályokat használjuk:

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

Nincs szükségünk a Log4j2 tavaszi rendszerindítás szokásos konfigurációjának egyéb módosítására.

Most már kihasználhatjuk a Log4j2 vadonatúj szolgáltatásait anélkül, hogy elakadnánk a régi SLF4J interfészen. De ehhez a megvalósításhoz is kötődünk, és át kell írnunk a kódunkat, amikor másik naplózási keretrendszerre váltunk.

7. Naplózás Lombokkal

A látott példákban eddig deklarálnunk kellett egy naplózó példányt naplózási keretünkből.

Ez a kazánlap kód bosszantó lehet. A Lombok által bevezetett különféle annotációk segítségével elkerülhetjük.

Először hozzá kell adnunk a Lombok függőséget a build szkriptünkhöz, hogy működni tudjunk vele:

 org.projectlombok lombok 1.18.4 biztosított 

7.1. @ Slf4j és @CommonsLog

Az SLF4J és az Apache Commons Logging API-k lehetővé teszik a naplózási keretrendszer megváltoztatásának rugalmasságát, a kódunkra nincs hatással.

És megtehetjük használja a Lombokét @ Slf4j és @CommonsLog annotációk a megfelelő naplózó példány felvétele az osztályunkba: org.slf4j.Logger az SLF4J és org.apache.commons.logging.Log az Apache Commons Logging programhoz.

Ahhoz, hogy ezeket a kommentárokat működés közben lássuk, hozzunk létre egy ehhez hasonló osztályt LoggingController de naplózó példány nélkül. Úgy nevezzük LombokLoggingController és azzal jegyezd fel @ Slf4j:

@RestController @ Slf4j public class LombokLoggingController {@RequestMapping ("/ lombok") public String index () {log.trace ("A TRACE Message"); log.debug ("DEBUG üzenet"); log.info ("INFO üzenet"); log.warn ("VIGYÁZAT Üzenet"); log.error ("ERROR üzenet"); return "Howdy! Nézze meg a naplókat a kimenet megtekintéséhez ..."; }}

Vegye figyelembe, hogy a kódrészletet csak kissé módosítottuk a használatával napló mint a naplózó példányunk. Ennek oka az, hogy hozzáadja a kommentárokat @ Slf4j automatikusan hozzáad egy nevű mezőt napló.

Val vel Nulla konfigurációs naplózás, az alkalmazás a mögöttes naplózási megvalósítási visszalépést fogja használni fakitermeléshez. Hasonlóképpen, a Log4j2 implementációt használják a Log4j2-konfigurációs naplózással történő naplózáshoz.

Ugyanezt a viselkedést tapasztaljuk, amikor kicseréljük az annotációt @ Slf4j val vel @CommonsLog.

7.2. @ Log4j2

Használhatjuk az annotációt @ Log4j2 hogy közvetlenül használja a Log4j2-t. Tehát egy egyszerű változtatást hajtunk végre LombokLoggingController használni @ Log4j2 ahelyett @ Slf4j vagy @CommonsLog:

@RestController @ Log4j2 public class LombokLoggingController {@RequestMapping ("/ lombok") public String index () {log.trace ("A TRACE Message"); log.debug ("DEBUG üzenet"); log.info ("INFO üzenet"); log.warn ("VIGYÁZAT Üzenet"); log.error ("ERROR üzenet"); return "Howdy! Nézze meg a naplókat a kimenet megtekintéséhez ..."; }} 

A naplózáson kívül vannak a Lombok további feljegyzései, amelyek segítenek a kód tisztán és rendben tartásában. További információ a Bevezetés a Lombok projektbe címen található, és van egy oktatóanyagunk is a Lombok beállítása az Eclipse és az IntelliJ használatával.

8. Vigyázzon a Java Util naplózással

A Spring Boot a JDK naplózását is támogatja a naplózás.tulajdonságok konfigurációs fájl.

Vannak esetek, amikor mégsem jó ötlet használni. A dokumentációból:

Ismert osztályterhelési problémák vannak a Java Util Logging alkalmazással, amelyek problémákat okoznak egy „futtatható jar” -ból való futtatáskor. Javasoljuk, hogy kerülje el, ha „futtatható tégelyből” fut, ha csak lehetséges.

Az is jó gyakorlat, ha a 4. rugót kézi kizárásra használja commons-naplózás a pom.xml fájlban a naplózási könyvtárak közötti esetleges ütközések elkerülése érdekében. Az 5. rugó ehelyett automatikusan kezeli, így a Spring Boot 2 használatakor semmit sem kell tennünk.

9. JANSI Windows rendszeren

Míg a Unix-alapú operációs rendszerek, mint például a Linux és a Mac OS X, alapértelmezés szerint támogatják az ANSI színkódokat, egy Windows konzolon minden sajnos egyszínű lesz.

A Windows a JANSI nevű könyvtáron keresztül szerezhet ANSI színeket.

Figyelnünk kell azonban az osztályok lehetséges hátrányaira.

Importálnunk és kifejezetten aktiválnunk kell a konfigurációban az alábbiak szerint:

Vissza:

  true [% thread]% kiemelés (% - 5szint)% cián (% logger {15}) -% msg% n 

Log4j2:

Az ANSI menekülési szekvenciákat számos platform natív módon támogatja, de a Windows rendszerben alapértelmezés szerint nem. Az ANSI támogatás engedélyezéséhez adja hozzá a Jansi jar-t alkalmazásunkhoz, és állítsa be a tulajdonságot log4j.skipJansi nak nek hamis. Ez lehetővé teszi a Log4j számára, hogy Jansi segítségével ANSI menekülési kódokat adjon hozzá, amikor a konzolra ír.

Megjegyzés: A Log4j 2.10 előtt Jansi alapértelmezés szerint engedélyezve volt. Az a tény, hogy Jansi natív kódot igényel, ezt jelenti Jansi-t csak egyetlen osztályú rakodó töltheti be. A webes alkalmazásoknál ez azt jelenti a Jansi edénynek a webes tároló osztályútvonalán kell lennie. Annak elkerülése érdekében, hogy problémákat okozzon a webalkalmazások számára, a Log4j már nem próbálja automatikusan betölteni Jansi-t kifejezett konfiguráció nélkül a Log4j 2.10-től kezdődően.

Érdemes megjegyezni:

  • Az elrendezés dokumentációs oldala hasznos Log4j2 JANSI információkat tartalmaz a kiemelés: {pattern} {style} szakasz.
  • Míg a JANSI képes kiszínezni a kimenetet, a Spring Boot's Banner (natív vagy a banner.txt fájl) monokromatikus marad.

10. Következtetés

Láttuk a fő naplózási keretrendszerrel való kapcsolattartás fő módjait a Spring Boot projekten belül.

Megvizsgáltuk az egyes megoldások fő előnyeit és buktatóit is.

Mint mindig, a teljes forráskód elérhető a GitHubon.