Spring Boot Unit Test negeert logging.level

Een van mijn maven-modules negeert mijn logboekniveaus bij het uitvoeren van tests.

In src/test/resourcesheb ik application.properties:

app.name=bbsng-import-backend
app.description=Import Backend Module for Application
spring.profiles.active=test
# LOGGING
logging.level.root=error
logging.level.org.springframework.core =fatal
logging.level.org.springframework.beans=fatal
logging.level.org.springframework.context=fatal
logging.level.org.springframework.transaction=error
logging.level.org.springframework.test=error
logging.level.org.springframework.web=error
logging.level.org.hibernate=ERROR

Ik heb ook application-test.propertiesgeprobeerd.

Mijn toepassing logt veel, vooral bij het laden van context. Ik heb logback.xml, logback-test.xmlen logback-spring.xmlgeprobeerd, maar niets helpt.

Mijn pom:

<parent>
    <groupId>at.company.bbsng</groupId>
    <artifactId>bbsng-import</artifactId>
    <version>0.1.0-SNAPSHOT</version>
</parent>
<artifactId>bbsng-import-backend</artifactId>
<name>bbsng-import-backend</name>
<properties>
    <start-class>at.company.bbsng.dataimport.ApplicationImportBackend</start-class>
</properties>
<dependencies>
    <!-- APPLICATION ... -->
    <dependency>
        <groupId>at.company.bbsng</groupId>
        <artifactId>bbsng-app-domain</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- SPRING ... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- JAVAX ... -->
       ...
    <!-- COMMONS ... -->
       ...
    <!-- LOMBOK ... -->
       ...
    <!-- DB -->
       ...
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${org.springframework.boot-version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Eén eenvoudige testles:

@ContextConfiguration(classes = { ApplicationImportBackend.class })
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
    @Autowired
    private JobLauncher jobLauncher;
    @Test
    public void testSimpleProperties() throws Exception {
        assertNotNull(jobLauncher);
    }
}

Applicatielogboeken staan ​​in DEBUG-modus.

En ja, de application.propertiesworden geladen. Ik heb al geprobeerd de toepassing te breken door een verkeerde configuratie.

Bedankt voor alle hints.


Antwoord 1, autoriteit 100%

Ok, wat ik nu heb gedaan, in alle modules die ik als volgt heb geconfigureerd:

src/main/resources:
Ik gebruik de logconfiguratie in application.properieszoals logging.level.*zoals beschreven in de vraag.

src/test/resources:
Ik gebruik logback-test.xmlzoals:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="*.myapp" level="error" />
    <logger name="org.springframework.core " level="error" />
    <logger name="org.springframework.beans" level="error" />
    <logger name="org.springframework.context" level="error" />
    <logger name="org.springframework.transaction" level="error" />
    <logger name="org.springframework.web" level="error" />
    <logger name="org.springframework.test" level="error" />
    <logger name="org.hibernate" level="error" />
</configuration>

Maar ik begrijp nog steeds niet waarom ik in een paar modules application.properties zou kunnen gebruiken, maar in een andere module negeert het … Maar voor nu werkt het voor mij zoals het is.

Maar misschien zijn een paar hints met achtergrondkennis nog steeds welkom.

Ik markeer mijn antwoord niet als oplossing, want het voelt nog steeds als een tijdelijke oplossing.


Antwoord 2, autoriteit 32%

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="org.springframework" level="INFO"/>
</configuration>

Als snelle oplossing heb ik het bestand logback.xmlmet de bovenstaande inhoud in src/test/resourcesgeplaatst en het werkt.


Antwoord 3, autoriteit 21%

Als u application.propertieswilt inschakelen, moet u een annotatie @SpringBootTesttoevoegen aan de testklasse, lees meer hier.


Antwoord 4, autoriteit 14%

Ik zoek daar ook een oplossing voor, ondertussen gebruik ik de volgende oplossing:

dit is niet de beste, maar het werkt

@BeforeClass
public static void setErrorLogging() {
   LoggingSystem.get(ClassLoader.getSystemClassLoader()).setLogLevel(Logger.ROOT_LOGGER_NAME, LogLevel.ERROR);
}

LoggingSystem: een veelgebruikte abstractie over logsystemen.

->

get: Detecteer en retourneer het gebruikte logsysteem. Ondersteunt Logback en Java Logging

setLogLevel:
Stelt het logniveau in voor een bepaalde logger.

Zorg ervoor dat u het backlog-niveau wijzigt voor alle andere testklassen.

Ik hoop dat het je helpt, veel succes


Antwoord 5, autoriteit 7%

Als uw tests zijn geannoteerd met @DataJpaTest, kunt u Hibernate SQL-loggen uitschakelen met:

@DataJpaTest(showSql=false)
public class MyTest {
  ..
}

Antwoord 6, autoriteit 2%

Probeer dit:

@ContextConfiguration(classes = ApplicationImportBackend.class, 
    initializers = ConfigFileApplicationContextInitializer.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
    //...
}

Other episodes