2016-02-05 18 views
43

Jeden z moich modułów maven ignoruje moje poziomy logowania podczas uruchamiania testów.Spring Boot Test ignoruje logging.level

W/test/zasobów src mam 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 

Próbowałem też application-test.properties.

Moja aplikacja rejestruje się dużo, szczególnie podczas ładowania kontekstu. Próbowałem logback.xml, logback-test.xml i logback-spring.xml, ale nic nie pomaga.

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

Jedna prosta klasa 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); 
    } 

} 

kłody aplikacja jest w trybie debugowania.

I tak, plik application.properties zostanie załadowany. Już próbowałem przerwać aplikację przez błędną konfigurację.

Dziękuję za wszelkie wskazówki.

Odpowiedz

38

Ok, co zrobiłem teraz, we wszystkich modułach I skonfigurowane następująco:

src/main/Zasoby:
Używam logowaniem konfigurację w application.properies jak logging.level. * jak opisano.

src/test/zasoby:
używam logback-test.xml jak:

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

Ale ja nadal nie rozumiem, dlaczego w kilku modułach można używać application.properties, ale w innym module ignoruje ... Ale na razie działa dla mnie takim, jaki jest.

Ale może niewiele wskazówek z podstawową wiedzą jest nadal mile widziane.

Nie zaznaczam mojej odpowiedzi jako rozwiązania, ponieważ nadal jest to możliwe.

+1

Moje założenie jest takie, że 'application.properties' jest przetwarzany później niż inicjalizacja testu. Dlatego 'org.springframework.test' nie ma wpływu na początkowe rejestrowanie testów. –

+1

Zobacz http://stackoverflow.com/a/38768026/1686330 –

+0

ten sam problem, również przy użyciu logback-test.xml – radistao

1

Spróbuj tego:

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

Dziękuję za odpowiedź, ale wyjście debugowania nadal. Może więcej kleju? –

14

Aby włączyć application.properties trzeba dodać @SpringBootTest adnotacji przetestować klasę, czytaj więcej here

+0

Ciekawi dlaczego głosujesz na to? Ta odpowiedź naprawdę mi pomogła, ponieważ chciałem wiedzieć o zmianach w adnotacji 1.4. –

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> 

Jak szybko naprawić, umieścić plik logback.xml z powyższej treści w src/test/zasoby i działa.

3

Ja również poszukuje rozwiązania, które w międzyczasie używam następujące rozwiązanie:

to nie jest najlepszy, ale to działa

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

LoggingSystem: wspólny abstrakcji nad systemy logowania.

->

get: Wykrywanie i przywrócić system rejestrowania w użyciu. Obsługuje logback i logi Java

setLogLevel: Ustawia poziom rejestrowania dla danego rejestratora.

Należy zmienić poziom logistyki wstecz dla wszystkich innych klas testowych.

Nadzieję, że to pomaga, Goodluck

1

Jeśli testy są opatrzone @DataJpaTest można przełączyć hibernacji SQL wylogowania z:

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