Stille inn loggnivå i vårstart ved testing

1. Oversikt

I denne veiledningen viser vi hvordan du gjør det angi loggnivået når du kjører tester for et Spring Boot-program.

Selv om vi stort sett kan ignorere loggene mens testene våre går, kan det være viktig å velge riktig loggnivå hvis det er behov for det diagnostisere mislykkede tester.

2. Viktigheten av loggnivået

Å konfigurere loggnivået riktig kan spare oss for mye tid.

For eksempel, hvis testene mislykkes på en CI-server, men viderefører utviklingsmaskinen vår, vi vil ikke kunne diagnostisere de sviktende testene med mindre vi har nok loggutdata. På den andre siden, hvis vi logger for mye detaljer, kan det være vanskeligere å finne nyttig informasjon.

For å oppnå riktig mengde detaljer kan vi finjustere loggningsnivåene til programmets pakker. Hvis vi finner ut at en Java-pakke er mer kritisk for testene våre, kan vi gi den et lavere nivå DEBUG. På samme måte kan vi konfigurere et høyere nivå for å unngå for mye støy i loggene INFO eller FEIL, for pakker som er mindre viktige.

La oss utforske forskjellige måter å sette loggnivå på.

3. Logg innstillinger application.properties

Hvis vi vil endre loggnivået i testene våre er det en egenskap vi kan angi src / test / ressurser /application.properties:

logging.level.com.baeldung.testloglevel = DEBUG

Denne eiendommen vil settloggnivå spesifikt for com.baeldung.testloglevel pakke.

På samme måte kan vi endre loggningsnivået for alle pakker med angi rotloggnivået:

logging.level.root = INFO

La oss nå prøve ut loggeinnstillingene våre ved å legge til et REST-sluttpunkt som skriver noen logger:

@RestController offentlig klasse TestLogLevelController {privat statisk slutt Logger LOG = LoggerFactory.getLogger (TestLogLevelController.class); @Autowired private OtherComponent otherComponent; @GetMapping ("/ testLogLevel") public String testLogLevel () {LOG.trace ("Dette er en TRACE-logg"); LOG.debug ("Dette er en DEBUG-logg"); LOG.info ("Dette er en INFO-logg"); LOG.error ("Dette er en FEIL-logg"); otherComponent.processData (); return "Lagt til noen loggutdata til konsollen ..."; }}

Som forventet, hvis vi kaller dette endepunktet i testene våre, vi kan se DEBUG tømmerstokker fra TestLogLevelController:

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

Å sette loggnivået slik er ganske enkelt, og vi bør absolutt gjøre det på denne måten hvis testene våre er merket med @SpringBootTest. Men hvis vi ikke bruker den merknaden, må vi konfigurere loggnivået på en annen måte.

3.1. Profilbaserte loggingsinnstillinger

Selv om du setter innstillingene i src / test / application.properties ville fungere i de fleste situasjoner, kan det være tilfeller der vi vil har forskjellige innstillinger for en test eller en gruppe tester.

I så fall, vi kan legge til en vårprofil i testen ved å bruke ActiveProfiles kommentar:

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

Våre loggeinnstillinger vil da være i en spesiell application-logging-test.properties fil i src / test / ressurser:

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

Hvis vi ringer TestLogLevelController fra testene våre med de beskrevne innstillingene, vil vi nå se SPOR logger fra kontrolleren vår, og det vil ikke være mer INFO logger fra andre pakker:

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

4. Konfigurere tilbakekobling

Hvis vi bruker Logback, som brukes som standard i Spring Boot, kan vi angi loggnivået i logback-test.xml fil innenfor src / test / ressurser:

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

Ovennevnte eksempel viser hvordan du setter loggnivået i vår Logback-konfigurasjon for tester. Rotloggnivået er satt til INFO og loggnivået for vårt com.baeldung.testloglevel pakken er satt til DEBUG.

Igjen, la oss sjekke utdataene etter å ha brukt innstillingene ovenfra:

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

4.1. Profilbasert tilbakekoblingskonfigurasjon

En annen måte å sette opp en profilspesifikk konfigurasjon for testene våre er å stille inn logging.config eiendom i application.properties for vår profil:

logging.config = classpath: logback-testloglevel.xml

Eller, enda en, si hvis vi vil ha en enkelt Logback-konfigurasjon på klassestien vår, er å bruke vårProfil element i logback.xml:

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

Nå, hvis vi kaller TestLogLevelController i testene våre med profilen logback-test1, vil vi få følgende utdata:

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

På den annen side, hvis vi endrer profilen til logback-test2vil utgangen være:

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

5. Et Log4J-alternativ

Alternativt, hvis vi bruker Log4J2, kan vi angi loggnivået i log4j2-spring.xml fil innenfor src / test / ressurser:

Vi kan sette vår vei Log4J konfigurasjon ved å stille inn logging.config eiendom i application.properties:

logging.config = classpath: log4j-testloglevel.xml

Til slutt, la oss sjekke utgangen etter å ha brukt innstillingene ovenfor:

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

6. Konklusjon

I denne artikkelen har vi lært hvordan du setter loggnivået når du tester et Spring Boot-program. Vi utforsket en rekke forskjellige måter å konfigurere den på.

Angi loggnivå i Spring Boot's application.properties viste seg som det enkleste, spesielt når vi bruker @SpringBootTest kommentar.

Som alltid er kildekoden for disse eksemplene over på GitHub.


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