web-dev-qa-db-fra.com

Le test de démarrage du printemps ignore logging.level

Un de mes modules maven ignore mes niveaux de journalisation lors de l'exécution de tests.

Dans src/test/resources j'ai 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

J'ai aussi essayé application-test.properties.

Mon application enregistre beaucoup, surtout lors du chargement du contexte. J'ai essayé logback.xml, logback-test.xml et logback-spring.xml mais rien n'y fait.

Mon 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>

Une simple classe de test:

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

    @Autowired
    private JobLauncher jobLauncher;

    @Test
    public void testSimpleProperties() throws Exception {
        assertNotNull(jobLauncher);
    }

}

Les journaux d'application sont en mode DEBUG.

Et oui, le fichier application.properties sera chargé. J'ai déjà essayé de casser l'application avec une mauvaise configuration.

Merci pour toutes les astuces.

73
Michael Hegner

Bon ce que j'ai fait maintenant, dans tous les modules, j'ai configuré comme suit:

src/main/resources:
J'utilise la configuration de journalisation dans application.properies comme logging.level. * Tel que décrit en question.

src/test/resources:
J'utilise logback-test.xml comme:

<?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>

Mais je ne comprends toujours pas pourquoi, dans quelques modules, je pourrais utiliser application.properties, mais dans un autre module, cela ignore ... Mais pour l'instant, cela fonctionne pour moi tel qu'il est.

Mais peut-être que quelques indices avec des connaissances de base sont toujours les bienvenus.

Je ne marque pas ma réponse comme une solution, parce que cela ressemble toujours à une solution de contournement.

69
Michael Hegner

Pour activer application.properties, il faut ajouter une annotation @SpringBootTest à la classe de test, en savoir plus ici

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

Comme solution rapide, je mets le fichier logback.xml avec le contenu ci-dessus dans src/test/resources et cela fonctionne.

20
dnocode

Si vos tests sont annotés avec @ DataJpaTest, vous pouvez désactiver la journalisation Hibernate SQL avec:

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

Je cherche aussi une solution à cela, en attendant j'utilise la solution suivante:

ce n'est pas le meilleur mais ça marche

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

LoggingSystem: une abstraction commune sur les systèmes de journalisation.

->

get: Détecte et renvoie le système de journalisation utilisé. Prise en charge de la journalisation et de la journalisation Java

setLogLevel: définit le niveau de journalisation pour un enregistreur donné.

Assurez-vous de modifier le niveau de journalisation précédent pour toutes les autres classes de test.

J'espère que ça vous aide, bonne chance

6
Idan

Essaye ça:

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