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.