Indstilling af logniveau i Spring Boot ved test

1. Oversigt

I denne vejledning viser vi, hvordan du gør det indstil logniveauet, når du kører tests for et Spring Boot-program.

Selvom vi for det meste kan ignorere logfilerne, mens vores tests er bestået, kan det være kritisk at vælge det rette logniveau, hvis der er behov for det diagnosticere mislykkede tests.

2. Betydningen af ​​logniveauet

Konfiguration af logniveauet korrekt kan spare os for meget tid.

For eksempel, hvis test mislykkes på en CI-server, men videregiver vores udviklingsmaskine, vi vil ikke være i stand til at diagnosticere de manglende tests, medmindre vi har nok logoutput. På den anden side, hvis vi logger for mange detaljer, kan det være sværere at finde nyttige oplysninger.

For at opnå den rigtige mængde detaljer kan vi finjustere logningsniveauerne for vores applikations pakker. Hvis vi finder ud af, at en Java-pakke er mere kritisk for vores tests, kan vi give den et lavere niveau, ligesom FEJLFINDE. På samme måde kan vi konfigurere et højere niveau for at undgå at have for meget støj i vores logfiler INFO eller FEJL, for pakker, der er mindre vigtige.

Lad os undersøge forskellige måder at indstille logningsniveauet på.

3. Log indstillinger application.properties

Hvis vi vil ændre logniveauet i vores tests er der en egenskab, vi kan angive src / test / ressourcer /application.properties:

logging.level.com.baeldung.testloglevel = DEBUG

Denne ejendom vil Indstillogniveau specifikt til com.baeldung.testloglevel pakke.

På samme måde kan vi ændre logningsniveauet for alle pakker ved at indstilling af rodlogniveauet:

logging.level.root = INFO

Lad os nu prøve vores logningsindstillinger ved at tilføje et REST-slutpunkt, der skriver nogle logfiler:

@RestController offentlig klasse TestLogLevelController {privat statisk endelig Logger LOG = LoggerFactory.getLogger (TestLogLevelController.class); @Autowired privat AndetKomponent andetKomponent; @GetMapping ("/ testLogLevel") public String testLogLevel () {LOG.trace ("Dette er en TRACE-log"); LOG.debug ("Dette er en DEBUG-log"); LOG.info ("Dette er en INFO-log"); LOG.error ("Dette er en FEJL-log"); otherComponent.processData (); return "Tilføjet noget logoutput til konsol ..."; }}

Som forventet, hvis vi kalder dette slutpunkt i vores tests, vi kan se FEJLFINDE logfiler fra TestLogLevelController:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en DEBUG-log 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en INFO-log 01-04-2019 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en FEJL log 04-04-2019 14: 08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Dette er en INFO log fra en anden pakke 01-04-2019 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbkomponent.OtherComponent: Dette er en FEJL-log fra en anden pakke 

Det er ret nemt at indstille logniveauet som dette, og vi bør bestemt gøre det på denne måde, hvis vores tests er kommenteret med @SpringBootTest. Men hvis vi ikke bruger denne kommentar, bliver vi nødt til at konfigurere logniveauet på en anden måde.

3.1. Profilbaserede logningsindstillinger

Selvom du sætter indstillingerne i src / test / application.properties fungerer i de fleste situationer, kan der være tilfælde, hvor vi gerne vil har forskellige indstillinger for en test eller en gruppe af tests.

I det tilfælde, vi kan tilføje en forårsprofil til vores test ved hjælp af ActiveProfiles kommentar:

@RunWith (SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestLogLevelApplication.class) @EnableAutoConfiguration (exclude = SecurityAutoConfiguration.class) @ActiveProfiles ("logging-test") public class TestProfLogLogprofil

Vores logningsindstillinger vil så være i en speciel application-logging-test.properties fil i src / test / ressourcer:

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

Hvis vi ringer TestLogLevelController fra vores tests med de beskrevne indstillinger, vil vi nu se SPOR logger fra vores controller, og der vil ikke være flere INFO logfiler fra andre pakker:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en DEBUG-log 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en INFO-log 01-04-2019 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en FEJL log 2019-04-01 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbkomponent.OtherComponent: Dette er en FEJL log fra en anden pakke

4. Konfiguration af logback

Hvis vi bruger Logback, som bruges som standard i Spring Boot, kan vi indstil logniveauet i logback-test.xml fil inden for src / test / ressourcer:

    % d {HH: mm: ss.SSS} [% thread]% -5niveau% logger {36} -% msg% n 

Ovenstående eksempel viser, hvordan man indstiller logniveauet i vores Logback-konfiguration til test. Rodlogniveauet er indstillet til INFO og logniveauet for vores com.baeldung.testloglevel pakken er indstillet til FEJLFINDE.

Lad os igen kontrollere output efter anvendelse af indstillingerne ovenfra:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en DEBUG-log 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en INFO-log 01-04-2019 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en FEJL-log 01-04-2019 14: 08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Dette er en INFO-log fra en anden pakke 2019-04-01 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Dette er en FEJL-log fra en anden pakke 

4.1. Profilbaseret logback-konfiguration

En anden måde at opsætte en profilspecifik konfiguration for vores tests er at indstille logging.config ejendom i application.properties til vores profil:

logging.config = classpath: logback-testloglevel.xml

Eller, endnu en, siger hvis vi vil have en enkelt Logback-konfiguration på vores klassesti, er at bruge springProfile element i logback.xml:

    % d {HH: mm: ss.SSS} [% thread]% -5niveau% logger {36} -% msg% n 

Nu, hvis vi kalder TestLogLevelController i vores test med profilen logback-test1, får vi følgende output:

2019-04-01 14: 08: 27.545 INFO 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en INFO-log 2019-04-01 14: 08: 27.546 FEJL 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en FEJL-log 01-04-2019 14: 08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbkomponent.AndreKomponent: Dette er en INFO log fra en anden pakke 2019-04-01 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbkomponent.OtherComponent: Dette er en FEJL-log fra en anden pakke 

På den anden side Hvis vi ændrer profilen til logback-test2, output vil være:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en DEBUG-log 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en INFO-log 01-04-2019 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en FEJL log 04-04-2019 14: 08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Dette er en INFO log fra en anden pakke 01-04-2019 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Dette er en FEJL-log fra en anden pakke 

5. Et Log4J-alternativ

Alternativt, hvis vi bruger Log4J2, kan vi indstil logniveauet i log4j2-spring.xml fil inden for src / test / ressourcer:

Vi kan sætte vejen for vores Log4J konfiguration ved at indstille logging.config ejendom i application.properties:

logging.config = classpath: log4j-testloglevel.xml

Lad os endelig kontrollere output efter anvendelse af ovenstående indstillinger:

2019-04-01 14: 08: 27.545 DEBUG 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en DEBUG-log 2019-04-01 14: 08: 27.545 INFO 56585 --- [ nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en INFO-log 01-04-2019 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbtestloglevel.TestLogLevelController: Dette er en FEJL log 04-04-2019 14: 08: 27.546 INFO 56585 --- [nio-8080-exec-1] cbcomponent.OtherComponent: Dette er en INFO log fra en anden pakke 01-04-2019 14: 08: 27.546 FEJL 56585 --- [nio-8080-exec-1] cbkomponent.OtherComponent: Dette er en FEJL-log fra en anden pakke 

6. Konklusion

I denne artikel har vi lært hvordan man indstiller logniveauet, når man tester et Spring Boot-program. Vi undersøgte en række forskellige måder at konfigurere det på.

Indstilling af logniveauet i Spring Boot's application.properties viste sig som det nemmeste, især når vi bruger @SpringBootTest kommentar.

Som altid er kildekoden til disse eksempler forbi på GitHub.


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