development

JUnit 테스트 클래스에서 log4j를 어디에서 구성합니까?

big-blog 2020. 9. 25. 08:02
반응형

JUnit 테스트 클래스에서 log4j를 어디에서 구성합니까?


내가 작성한 마지막 JUnit 테스트 케이스를 살펴보면 클래스 생성자 내부에서 log4j의 BasicConfigurator.configure () 메서드를 호출했습니다. Eclipse의 "run as JUnit test case"명령에서 해당 단일 클래스 만 실행하는 데는 잘 작동했습니다. 그러나 나는 그것이 틀렸다는 것을 압니다. 우리의 메인 테스트 스위트가 하나의 프로세스에서 이러한 모든 클래스를 실행한다고 확신합니다. 따라서 log4j 구성이 더 높은 곳에서 일어나야합니다.

하지만 여전히 테스트 케이스를 자체적으로 실행해야하는데,이 경우 log4j를 구성하고 싶습니다. 테스트 케이스가 독립형으로 실행될 때 실행되도록 구성 호출을 어디에 넣어야하지만 테스트 케이스가 더 큰 스위트의 일부로 실행될 때가 아닌가?


LogManager되는 Log4j의 구성 클래스를 결정은 사용에 정적 블록 클래스가로드 될 때 실행. 최종 사용자를위한 세 가지 옵션이 있습니다.

  1. log4j.defaultInitOverridefalse로 지정 하면 log4j를 전혀 구성하지 않습니다.
  2. 구성 파일 경로를 직접 지정하고 클래스 경로 검색을 재정의합니다. 다음 인수를 사용하여 구성 파일의 위치를 ​​직접 지정할 수 있습니다 java.

    -Dlog4j.configuration=<path to properties file>

    테스트 실행기 구성에서.

  3. 테스트 중에 log4j가 log4j 구성 파일의 클래스 경로를 스캔하도록 허용합니다. (기본값)

온라인 설명서를 참조하십시오 .


일반적으로 log4j.xml 파일을 src / test / resources에 넣고 log4j가 자체적으로 찾도록합니다. 코드가 필요하지 않으며 기본 log4j 초기화가이를 선택합니다. (일반적으로 내 로거를 'DEBUG'로 설정하고 싶습니다.)


SLF4J (Simple Logging Facade for Java) 를 살펴볼 수 있습니다 . Log4j와 같은 초기 설정 호출이 필요하지 않은 Log4j를 감싸는 파사드입니다. API 차이가 적기 때문에 Slf4j 용 Log4j를 전환하는 것도 매우 쉽습니다.


log4j.xml에서 시스템 속성을 사용합니다.

...
<param name="File" value="${catalina.home}/logs/root.log"/>
...

다음으로 테스트를 시작하십시오.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <systemProperties>
            <property>
                <name>catalina.home</name>
                <value>${project.build.directory}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>

참고 URL : https://stackoverflow.com/questions/878348/where-do-i-configure-log4j-in-a-junit-test-class

반응형