Spring Boot Test ignore logging.level

91

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

Dans src/test/resourcesj'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, en particulier lors du chargement du contexte. J'ai essayé logback.xml, logback-test.xmlet logback-spring.xmlmais rien aide.

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 classe de test simple:

@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 application.propertiessera chargé. J'ai déjà essayé de casser l'application par une mauvaise configuration.

Merci pour tous les indices.

Michael Hegner
la source

Réponses:

90

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

src / main / ressources:
j'utiliser la configuration de l' exploitation forestière dans application.properiescomme logging.level.*tel que décrit dans la question.

src / test / resources:
j'utilise logback-test.xmlcomme:

<?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, il ignore ... Mais pour l'instant, cela fonctionne pour moi tel quel.

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

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

Michael Hegner
la source
7
Mon hypothèse est qu'elle application.propertiesest analysée plus tard que l'initialisation du test. C'est pourquoi org.springframework.testn'a aucun effet sur la journalisation initiale des tests.
Elnur Abdurrakhimov
même problème, également en utilisant logback-test.xml
radistao
3
C'est génial. J'ai ajouté <logger name="org.springframework.boot" level="warn" />et <logger name="org.eclipse.jetty" level="warn" />pour vraiment minimiser le bruit. Si vous utilisez swagger, vous pouvez également ajouter <logger name="springfox" level="warn" />. Bien joué. Ayez une prime!
Bohème
1
Cela a aidé, même si j'ai commencé à voir un tas de journaux de logback lui-même après avoir essayé d'ajouter le logback-test.xmlfichier. Pour les désactiver, j'ai suivi la réponse principale de ce post StackOverflow - et BAM, j'ai réussi à me débarrasser de toute la journalisation précurseur lors de l'exécution des tests.
Danny Bullis
1
Même problème. 2 modules avec exactement la même configuration (classe de base). L'un a une journalisation lors de la création du contexte, l'autre non. Les modifications apportées à application.properties (logging.level) prennent effet. L'utilisation ci-dessus logback-test.xmlfonctionne comme prévu. (+1) merci
Torsten
27
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="org.springframework" level="INFO"/>
</configuration>

En guise de solution rapide, j'ai mis un logback.xmlfichier avec le contenu ci-dessus src/test/resourceset cela fonctionne.

dnocode
la source
3
Belle solution propre. Le fichier peut également être nommé «logback-test.xml» et doit être placé sous «src / test / resources» pour plus de clarté.
Krzysztof Tomaszewski
Oui, la clarté est la raison pour laquelle je l'ai nommélogback-text.xml
Michael Hegner
quelle est la différence avec ma réponse?
Michael Hegner
22

Pour activer l' application.propertiesajout d'une annotation @SpringBootTestà la classe de test, lisez plus ici .

ksandr
la source
2
@SpringBootTest est pour les tests d'intégration et donc l'application.properties sera chargée. Mais pour les tests unitaires, ce n'est pas la bonne réponse.
Tobsch
11

Je cherche également 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é. Prend en charge Logback et Java Logging

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

Assurez-vous de modifier le niveau de journalisation pour toutes les autres classes de test.

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

Idan
la source
2
C'est la seule façon pour moi d'arrêter la journalisation. Merci
RobOhRob
C'est un morceau de code habituel à savoir au cas où vous devriez tester ce qui est enregistré sans avoir un tas de fichiers de configuration de l'enregistreur.
Xenson
7

Si vos tests sont annotés avec, @DataJpaTestvous pouvez désactiver la déconnexion d'Hibernate SQL avec:

@DataJpaTest(showSql=false)
public class MyTest {
  ..
}
uı6ʎɹnɯ ꞁəıuɐp
la source
Merci C'est de loin la meilleure réponse. Merci beaucoup.
Doogle le
2

Essaye ça:

@ContextConfiguration(classes = ApplicationImportBackend.class, 
    initializers = ConfigFileApplicationContextInitializer.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
    //...
}
Luboskrnac
la source
Merci pour la réponse, mais la sortie de débogage est toujours là. Plus de colle peut-être?
Michael Hegner