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


85

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

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


여기서 2가 아닌 log4j 1.x를 가정하겠습니다.
rogerdpack

답변:


51

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

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

    -Dlog4j.configuration=<path to properties file>

    테스트 실행기 구성에서.

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

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


"log4j 구성 파일"인지 어떻게 알 수 있습니까? 파일 이름은 무엇입니까? (log4j.xml?)
Chad

1
@Chad : 귀하의 질문을 해결하기 위해 제 답변을 편집했습니다. 이것이 어떻게 구현되는지 정확히 보려면 ​​정적 블록에 대한 링크를 참조하십시오.
Paul Morie 2013-08-29

log4j2를 사용하고 있으며 파일을 나타 내기 위해 다음 설정을 사용해야했습니다 -Dlog4j.configurationFile=log4j2.xml.. 또한로드 / 시작을 디버그하려는 경우이 설정이 유용 할 수 있습니다 -Dlog4j2.debug=true..
Kent

이 답변에 대해 좀 더 구체적으로 설명 할 방법이 있습니까?
markthegrea

61

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


6
표준 건물 테스트를 위해 Log4j를 경고 또는 오류로 설정합니다. 테스트가 성공하면 (음성 테스트도) 로깅이 없어야하므로 사용자의주의를 끌 수 있습니다.
keiki

2
네, log4j 1.x에 맞습니다. log4j2의 경우 log4j2-test.properties 파일과 같은 더 많은 "이국적인"파일을 사용할 수 있습니다 ... logging.apache.org/log4j/2.x/manual/configuration.html :)
rogerdpack


5

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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.