2016-02-05 18 views
43

Eines meiner Maven-Module ignoriert meine Logging-Level bei Tests.Spring Boot Test ignoriert logging.level

In src/test/resources Ich habe 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 

ich auch application-test.properties versucht.

Meine Anwendung protokolliert viel, besonders beim Laden von Kontext. Ich habe versucht logback.xml, logback-test.xml und logback-spring.xml aber nichts hilft.

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

Eine einfache Test-Klasse:

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

    @Autowired 
    private JobLauncher jobLauncher; 

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

} 

Anwendungsprotokolle im Debug-Modus.

Und ja, die application.properties wird geladen. Ich habe bereits versucht, die Anwendung durch falsche Konfiguration zu brechen.

Vielen Dank für Hinweise.

Antwort

38

Okay, was ich jetzt habe, in allen Modulen ich wie folgt konfiguriert:

src/main/resources:
I Konfiguration in application.properies-Protokollierung wie logging.level. * wie in Frage beschrieben.

src/test/resources:
I logback-test.xml wie verwenden:

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

Aber ich verstehe immer noch nicht, warum in wenigen Modulen ich application.properties verwenden könnte, aber in einem anderen Modul ignoriert es ... Aber für jetzt funktioniert es für mich wie es ist.

Aber vielleicht sind einige Hinweise mit Hintergrundwissen immer noch willkommen.

Ich markiere meine Antwort nicht als Lösung, weil es sich immer noch wie ein Workaround anfühlt.

+1

Meine Annahme ist, dass 'application.properties' später als die Testinitialisierung analysiert wird. Deshalb hat 'org.springframework.test' keine Auswirkungen auf die erste Testprotokollierung. –

+1

Siehe http://Stackoverflow.com/a/38768026/1686330 –

+0

selben Problem, auch mit logback-test.xml – radistao

1

Versuchen Sie folgendes:

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

Sie für die Antwort danken, aber Debug-Ausgabe immer noch da. Noch mehr Klebstoff vielleicht? –

14

application.properties eine Anmerkung @SpringBootTest hinzufügen müssen aktivieren Klasse zu testen, mehr lesen here

+0

Neugierig, warum die Stimme hier runter? Diese Antwort hat mir wirklich geholfen, da ich mir die Änderungen der 1.4 Anmerkung merken wollte. –

10
<?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 schnell beheben, habe ich logback.xml Datei mit dem obigen Inhalt in src/test/Ressourcen und es funktioniert.

3

Ich bin auch für eine Lösung, dass suchen, mittlerweile bin ich mit der folgenden Lösung:

dies nicht die beste ist, aber es funktioniert

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

LoggingSystem: eine gemeinsame Abstraktion über Logging-Systeme.

->

get: Erkennen und das Logging-System im Einsatz zurück. Unterstützt Logback und Java Logging

setLogLevel: Legt die Protokollierungsstufe für einen bestimmten Logger fest.

Stellen Sie sicher, dass die Protokollierungsstufe für alle anderen Testklassen geändert wird.

Hoffe, es hilft Ihnen, goodluck

1

Wenn Sie Ihre Tests mit Anmerkungen versehen werden mit @DataJpaTest Sie mit Hibernate SQL abzumelden wechseln:

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