Nastavenie úrovne protokolu v Spring Boot pri testovaní

1. Prehľad

V tejto príručke si ukážeme, ako na to nastavte úroveň protokolu pri spustení testov pre aplikáciu Spring Boot.

Aj keď môžeme protokoly väčšinou ignorovať, kým prebiehajú naše testy, výber správnej úrovne protokolu môže byť kritický, ak je potrebné diagnostikovať neúspešné testy.

2. Dôležitosť úrovne protokolu

Správna konfigurácia úrovne denníka nám môže ušetriť veľa času.

Napríklad ak testy zlyhávajú na serveri CI, ale odovzdávajú náš vývojový stroj, nebudeme schopní diagnostikovať zlyhávajúce testy, pokiaľ nebudeme mať dostatočný výstup protokolu. Na druhej strane, ak zaznamenáme príliš veľa podrobností, môže byť ťažšie nájsť užitočné informácie.

Aby sme dosiahli správne množstvo detailov, môžeme doladiť úrovne protokolovania balíkov našej aplikácie. Ak zistíme, že balík Java je pre naše testy kritickejší, môžeme mu dať nižšiu úroveň DEBUG. Podobne, aby sme zabránili príliš veľkému hluku v našich denníkoch, môžeme nakonfigurovať vyššiu úroveň INFO alebo CHYBA, pre balíčky, ktoré sú menej dôležité.

Poďme preskúmať rôzne spôsoby nastavenia úrovne protokolovania.

3. Nastavenia prihlásenia v application.properties

Ak chceme upraviť úroveň protokolu v našich testoch je vlastnosť, ktorú môžeme nastaviť src / test / zdroje /application.properties:

logging.level.com.baeldung.testloglevel = DEBUG

Táto vlastnosť bude nastaviťúroveň protokolu konkrétne pre com.baeldung.testloglevel balíček.

Podobne môžeme zmeniť úroveň protokolovania pre všetky balíky pomocou nastavenie úrovne koreňového protokolu:

logging.level.root = INFO

Poďme si vyskúšať naše nastavenia protokolovania pridaním koncového bodu REST, ktorý zapisuje niektoré protokoly:

@RestController verejná trieda TestLogLevelController {private static final Logger LOG = LoggerFactory.getLogger (TestLogLevelController.class); @Autowired private OtherComponent otherComponent; @GetMapping ("/ testLogLevel") public String testLogLevel () {LOG.trace ("Toto je TRACE protokol"); LOG.debug ("Toto je protokol DEBUG"); LOG.info ("Toto je INFO protokol"); LOG.error ("Toto je protokol CHYBY"); otherComponent.processData (); návrat "Pridaný nejaký výstup protokolu do konzoly ..."; }}

Ako sa dalo očakávať, ak tento koncový bod v našich testoch nazveme, uvidíme DEBUG guľatiny od TestLogLevelController:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je protokol DEBUG 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je INFO log 2019-04-01 14:08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: toto je CHYBOVÝ protokol 2019-04-01 14:08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je INFO log z iného balíka 2019-04-01 14: 08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je protokol CHYBY z iného balíka 

Takéto nastavenie úrovne protokolu je celkom jednoduché a určite by sme to mali urobiť, ak sú v našich testoch poznámky @SpringBootTest. Ak však túto anotáciu nepoužívame, budeme musieť úroveň protokolu nakonfigurovať iným spôsobom.

3.1. Nastavenia protokolovania na základe profilu

Aj keď sa nastavenia nastavujú do src / test / application.properties fungovalo by to vo väčšine situácií, môžu sa vyskytnúť prípady, kedy by sme to chceli mať rôzne nastavenia pre jeden test alebo skupinu testov.

V tom prípade, môžeme do nášho testu pridať jarný profil pomocou ActiveProfiles anotácia:

@RunWith (SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestLogLevelApplication.class) @EnableAutoConfiguration (vylúčiť = SecurityAutoConfiguration.class) @ActiveProfiles ("loging-test") verejná trieda TestWog}

Naše nastavenia protokolovania budú potom špeciálne application-logging-test.properties súbor v rámci src / test / zdroje:

logging.level.com.baeldung.testloglevel = TRACE logging.level.root = CHYBA

Ak zavoláme TestLogLevelController z našich testov s popísanými nastaveniami sa teraz zobrazí TRACE protokoly od nášho kontrolóra a už nebudú INFO protokoly z iných balíkov:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je protokol DEBUG 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je INFO log 2019-04-01 14:08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: toto je CHYBOVÝ protokol 2019-04-01 14: 08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je CHYBOVÝ protokol z iného balíka

4. Konfigurácia protokolu Logback

Ak použijeme Logback, ktorý sa štandardne používa v Spring Boot, môžeme nastaviť úroveň protokolu v logback-test.xml spis v rámci src / test / zdroje:

    % d {HH: mm: ss.SSS} [% vlákno]% -5úroveň% logger {36} -% msg% n 

Vyššie uvedený príklad ukazuje, ako nastaviť úroveň protokolu v našej konfigurácii Logback pre testy. Úroveň koreňového protokolu je nastavená na INFO a úroveň protokolu pre našu com.baeldung.testloglevel balík je nastavený na DEBUG.

Po vykonaní nastavení zhora znova skontrolujeme výstup:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je protokol DEBUG 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je INFO denník 2019-04-01 14:08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: toto je CHYBOVÝ protokol 2019-04-01 14:08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je INFO log z iného balíka 2019-04-01 14: 08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je protokol CHYBY z iného balíka 

4.1. Konfigurácia prihlásenia založená na profile

Ďalším spôsobom, ako nastaviť konfiguráciu špecifickú pre profil pre naše testy je nastavenie protokolovanie.konfigurácia majetok v application.properties pre náš profil:

logging.config = classpath: logback-testloglevel.xml

Alebo ešte ďalší, povedzme ak chceme mať na našej triede jednu konfiguráciu Logback, je používať profilPružiny prvok v logback.xml:

    % d {HH: mm: ss.SSS} [% vlákno]% -5úroveň% logger {36} -% msg% n 

Teraz, ak hovoríme TestLogLevelController v našich testoch s profilom logback-test1, dostaneme nasledujúci výstup:

2019-04-01 14: 08: 27.545 INFO 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je INFO denník 2019-04-01 14: 08: 27.546 CHYBA 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je protokol CHYBY 2019-04-01 14: 08: 27.546 INFO 56585 --- [[nio-8080-exec-1] cbcomponent.OtherComponent: Toto je INFO protokol z iného balíka 2019-04-01 14:08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je CHYBOVÝ protokol z iného balíka 

Na druhej strane, ak zmeníme profil na logback-test2, výstup bude:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je denník DEBUG 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je INFO log 2019-04-01 14:08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: toto je CHYBOVÝ protokol 2019-04-01 14:08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je INFO log z iného balíka 2019-04-01 14: 08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je protokol CHYBY z iného balíka 

5. Alternatíva Log4J

Prípadne, ak použijeme Log4J2, môžeme nastaviť úroveň protokolu v log4j2-spring.xml spis v rámci src / test / zdroje:

Môžeme nastaviť cestu našim Log4J konfigurácia nastavením protokolovanie.konfigurácia majetok v application.properties:

logging.config = cesta k triede: log4j-testloglevel.xml

Nakoniec po vykonaní vyššie uvedených nastavení skontrolujeme výstup:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je protokol DEBUG 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Toto je INFO log 2019-04-01 14:08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: toto je CHYBOVÝ protokol 2019-04-01 14:08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je INFO log z iného balíka 2019-04-01 14: 08: 27.546 CHYBA 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Toto je protokol CHYBY z iného balíka 

6. Záver

V tomto článku sme sa dozvedeli ako nastaviť úroveň protokolu pri testovaní aplikácie Spring Boot. Preskúmali sme množstvo rôznych spôsobov konfigurácie.

Nastavenie úrovne denníka v Spring Boot application.properties sa ukázal ako najjednoduchší, zvlášť keď používame @SpringBootTest anotácia.

Zdrojový kód týchto príkladov je ako vždy na GitHube.


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