2013-05-24 2 views
5

이 질문은 여러 번 묻습니다. 하지만 내가 시도한 모든 솔루션 (대부분 log4j.properties 파일이 올바른 위치에 있고 올바르게 입력되었는지 확인해야 함)이 제 경우에는 작동하지 않습니다.log4j : WARN 로거에 대한 어펜더를 찾을 수 없습니다 - slf4j-log4j12 사용

나는 메이븐 프로젝트가있다. 내 테스트를 위해 log4j를 사용하고 싶습니다. 테스트 클래스는 로거가 사용되는 src/main/java에 정의 된 도우미 메서드를 사용합니다. 내 도우미 클래스에서

(SRC의/주/자바는 /) 나는

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

을 가져온 나는 모두 SRC에서/주 로거

private static final String TAG = Helper.class.getSimpleName(); 
private static final Logger logger = LoggerFactory.getLogger(TAG); 

내가 포함 시켰를 인스턴스화 한/자원과 SRC/테스트/자원은 다음 log4j.properties 내 POM에서

### set log levels - for more verbose logging change 'info' to 'debug' ### 
### Also add logfile to the root, if need stdout then add stdout appender here### 
log4j.rootLogger=debug, stdout 

### direct log messages to stdout ### 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{dd-mm HH:mm:ss,SSS} %p/%c{1}:%L - %m%n 

파일 내가 SLF4J에 대한 종속성을 포함 시켰습니다 내 도우미 클래스의 코드에서
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
</dependency> 

나는

logger.debug("logger test..."); 

없음 메시지가 콘솔에 인쇄됩니다 이런 식으로 로거를 사용하고 난 다음 경고 메시지를받을

log4j:WARN No appenders could be found for logger (Helper). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

무엇 내가 빠졌어?

업데이트

문제는 log4j에-test.xml의에 log4j.configuration 속성을 설정하는 프로젝트 옵션에 관련이 있었다. 프로젝트 Maven pom에 다음 플러그인을 추가했는데 문제가 해결되었습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.14.1</version> 
    <configuration> 
     <systemPropertyVariables> 
     <log4j.configuration>log4j.properties</log4j.configuration> 
     </systemPropertyVariables> 
    </configuration> 
    </plugin> 
+4

추가'-Dlog4j.debug' JVM 인수로 정확히 log4j 구성 파일을 확인하십시오. –

답변

5

게시 한 부품에서 정상적으로 보입니다. 문제를 조사해 봅시다. 다음

  1. 정리 생성 된 코드
    MVN 깨끗한
    나는 간단한 프로젝트 (JUnit 테스트 도우미의 메소드를 호출하기 : 로거 문을 호출하는 방법을 가지고, AppTest 만 2 클래스 도우미를)했다 파일은
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main/resources/log4j.properties에게
    ./src/test/java/sub/optimal/ 존재 예제/AppTest.java
    ./src/test /resources/log4j.properties


  2. 다음 파일
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    에게 ./src/main 존재
    가 MVN 컴파일 코드를 컴파일 /resources/log4j.properties
    ./src/test/java/sub/optimal/mavenexample/AppTest.java
    ./src/test/resources/log4j.특성 파일이 대상 디렉토리로 복사되지 않은 경우 속성
    ./target/classes/log4j.properties
    ./target/classes/sub/optimal/mavenexample/Helper.class는

    당신은을 찾을 필요 이유

  3. 일부 시작점은

    MVN -debug 컴파일
    MVN -Dlog4j.debug 테스트
+0

안녕 Suboptimal, log4j.properties가 target/classes 디렉토리에 올바르게 복사됩니다. 그러나 mvn -Dlog4j.debug 테스트 명령을 실행하면 다음 출력이 표시됩니다. log4j : 컨텍스트 클래스 로더 [email protected]를 사용하여 [log4j-test.xml]을 찾으려고합니다. log4j : [email protected] 클래스 로더를 사용하여 [log4j-test.xml]을 찾으려고합니다. log4j : ClassLoader.getSystemResource()를 사용하여 [log4j-test.xml]을 찾으려고합니다. log4j : [log4j-test.xml] 리소스를 찾을 수 없습니다. .properties 파일을 찾지 않는 것처럼 보입니다. 나는 왜 이해할 수 없다 – Piero

+1

안녕하세요 피에로, 기본 log4j 구성 파일 이름이 아닌 log4j-test.xml을 찾으려면 somwhere를 구성해야합니다. 아마 당신의 설정에'-Dlog4j.configuration = log4j-test.xml' 옵션이 있거나 시스템 속성이 프로그래밍 방식으로 설정되어있을 것입니다. 그것을 찾으십시오. – SubOptimal

+0

안녕 SubAptimal. 예,이 구성 변수가 설정된 이유와 위치를 여전히 알 수 없습니다. 그러나 그것을 고치는 방법을 찾았습니다. 내 업데이트를 참조하십시오. log4j 디버그 출력을 표시하는 방법에 대한 팁을 주셔서 감사합니다. – Piero

0

시도 살전의 출력을 확인 전자 명령 ...

$ 해제 FLUME_HOME 그런

및 시도 ..... 그것은 나를 위해 일한

....

관련 문제