Spring Boot Test는 logging.level을 무시합니다.


91

내 maven 모듈 중 하나는 테스트를 실행할 때 내 로깅 수준을 무시합니다.

에서 src/test/resourcesI 있습니다 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

나는 또한 시도했다 application-test.properties.

내 응용 프로그램은 특히 컨텍스트를로드 할 때 많이 기록합니다. 나는 시도 logback.xml, logback-test.xml그리고 logback-spring.xml아무것도 도움이되지 않습니다.

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

하나의 간단한 테스트 클래스 :

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

    @Autowired
    private JobLauncher jobLauncher;

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

}

애플리케이션 로그가 DEBUG 모드에 있습니다.

그리고 예, application.properties로드됩니다. 이미 잘못된 구성으로 응용 프로그램을 중단하려고했습니다.

힌트를 주셔서 감사합니다.

답변:


90

좋아, 내가 한 모든 모듈에서 다음과 같이 구성했습니다.

SRC / 메인 / 자원 :
나는 로깅 구성을 사용 application.properies같은 logging.level.*질문에 설명 된대로.

src / test / resources : 다음 과 같이
사용합니다 logback-test.xml.

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

하지만 여전히 이해가 안되는데 왜 몇 개의 모듈에서 application.properties를 사용할 수 있었지만 다른 모듈에서는 무시합니다 ...하지만 지금은 그대로 작동합니다.

그러나 배경 지식이있는 몇 가지 힌트는 여전히 환영합니다.

내 대답을 해결책으로 표시하지 않습니다. 여전히 해결 방법처럼 느껴지기 때문입니다.


7
내 가정은 application.properties테스트 초기화보다 늦게 구문 분석되고 있다는 것 입니다. 이것이 org.springframework.test초기 테스트 로깅에 영향을 미치지 않는 이유 입니다.
Elnur Abdurrakhimov

동일한 문제, logback-test.xml 사용
radistao

3
굉장합니다. 나는 소음을 추가 <logger name="org.springframework.boot" level="warn" />하고 <logger name="org.eclipse.jetty" level="warn" />정말로 최소화했습니다. swagger를 사용하는 경우 <logger name="springfox" level="warn" />. 잘 했어. 현상금이 있습니다!
보헤미안

1
logback-test.xml파일 추가를 시도한 후 로그 백 자체에서 로그를보기 시작했지만 이것은 도움이되었습니다 . 이를 해제하기 위해이 StackOverflow 게시물 과 BAM 의 주요 답변을 따랐습니다 . 테스트를 실행할 때 모든 선행 로깅을 제거했습니다.
Danny Bullis

1
같은 문제. 정확히 동일한 구성 (기본 클래스)을 가진 2 개의 모듈. 하나는 컨텍스트 생성 중에 로깅을하고 다른 하나는 그렇지 않습니다. application.properties (logging.level)의 변경 사항이 적용됩니다. 위의 사용 logback-test.xml은 예상대로 작동합니다. (+1) 감사합니다
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>

빠른 수정으로 logback.xml위의 내용이있는 파일을 넣으면 src/test/resources작동합니다.


3
좋고 깨끗한 솔루션입니다. 파일 이름은 "logback-test.xml"로 지정할 수도 있으며 명확성을 위해 'src / test / resources'아래에 배치해야합니다.
Krzysztof Tomaszewski

예, 명확성이 내가 이름을 지정한 이유입니다logback-text.xml
Michael Hegner

내 대답의 차이점은 무엇입니까?
Michael Hegner 19

22

테스트 클래스에 application.properties주석을 추가 할 필요가 있도록하려면 여기를@SpringBootTest 참조 하십시오 .


2
@SpringBootTest는 통합 테스트 용이므로 application.properties가로드됩니다. 그러나 단위 테스트의 경우 이것은 정답이 아닙니다.
Tobsch

11

나는 또한 그것에 대한 해결책을 찾고 있는데, 한편 다음 해결책을 사용하고 있습니다.

이것은 최고는 아니지만 작동합니다.

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

LoggingSystem: 로깅 시스템에 대한 일반적인 추상화입니다.

->

get: 사용중인 로깅 시스템을 감지하여 반환합니다. Logback 및 Java 로깅 지원

setLogLevel: 주어진 로거에 대한 로깅 수준을 설정합니다.

다른 모든 테스트 클래스에 대한 백 로그 수준을 변경해야합니다.

도움이 되었기를 바랍니다.


2
이것이 내가 로깅을 중지하는 유일한 방법입니다. 감사합니다
RobOhRob

이것은 많은 로거 구성 파일없이 로깅되는 내용을 테스트해야하는 경우 알아야 할 일반적인 코드입니다.
Xenson

7

테스트에 주석이 달린 경우 다음을 사용하여 @DataJpaTestHibernate SQL 로그 오프를 전환 할 수 있습니다.

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

감사합니다. 이것이 최고의 답변입니다. 엄청 고마워.
Doogle

2

이 시도:

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

답장을 보내 주셔서 감사합니다.하지만 여전히 디버그 출력이 있습니다. 접착제가 더 있습니까?
Michael Hegner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.