2010-12-07 3 views
4

저는 log4j를 매우 신중하게 사용하고 있습니다. 그러나 여기 무슨 일이 일어나고 있는지 모르겠다 : 그것은 파일에 올바르게 로깅하고 있지만, 생성 된 로그의 파일 이름은 잘못된 것으로 보인다.Log4j는 지정된 파일 이름 대신 log4j.log에 로깅합니다.

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] %m%n"/> 
    </layout> 
</appender> 


<appender name="file" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="log/messagecount.log" /> 
    <param name="Append" value="true" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] - %m%n"/> 
    </layout>   
</appender>  

<root> 
    <level value="debug"/>  
    <appender-ref ref="file"/> 
    <!-- <appender-ref ref="rolling"/> --> 
</root> 

</log4j:configuration> 

그것은 로그 폴더 대신 messagecount.log 파일 아래 log4j.log 파일을 만듭니다 :

여기 내의 log4j 설정입니다. 그 값 속성은 내가 생각하는대로하지 못합니까?

내가 로거를 초기화하기 방법은 다음과 같습니다

클래스 수준 변수 :

private static Logger logger = Logger.getLogger(MessageCount.class); 

그리고 init 함수 :

private void initLogger() throws IOException { 

    Properties props = new Properties(); 
    props.load(getClass().getResourceAsStream("/log4j.xml")); 
    PropertyConfigurator.configure(props); 

    logger.info("----------Logger init-----------") ; 

//  logger.debug("Sample debug message"); 
//  logger.info("Sample info message"); 
//  logger.warn("Sample warn message"); 
//  logger.error("Sample error message"); 
//  logger.fatal("Sample fatal message"); 

} 

의 log4j.xml 설정 파일이 루트에 내 src 폴더.

이 파일이 유효한 XML이 아니기 때문에 log4j에를 구성하는 오류가 발생합니다, 우선, 당신

+1

init 함수가 필요하지 않습니다. 그것을 삭제하십시오. 그냥 응용 프로그램의 클래스 경로 (bin 또는 build 폴더에'log4j.xml'을 넣으면 src 폴더에서 찾을 수 없습니다.) 그러면 응용 프로그램이 자동으로 찾게됩니다. – darioo

답변

0

알 수 있습니다. 여기에 무슨 일이 있었는지, 그리고 나는 그들이 그것을 알아 내는데 도움이 되었기 때문에 darioo와 dogbane에게 그들의 답변/코멘트에 대해 감사하고 싶습니다.

init 함수는 필요하지 않습니다. JVM 매개 변수로 -Dlog4j.debug = true를 사용하면 bin 폴더에있는 xml 구성 파일의 일부 사본이 이미로드되었음을 알 수있었습니다.

그래서 초기화 기능을 없애고 config xml을 bin 폴더에 넣으면 작동합니다.

0

내가 XML 파일의 복사본 & 붙여 넣기를 만들어 주셔서 감사합니다. 추가하지 않았습니다.

</log4j:configuration> 

마지막 줄에. 이것이 당신의 문제의 근원이 될 수 있었습니까?

이 문제를 해결하면 log4j가 올바르게 시작되고 log/messagecount.log이라는 파일이 올바르게 생성됩니다.

log4j 1.2.15를 사용하고 있습니다. 설정이 동일하지 않으면 log4j 버전과 환경을 게시 해보십시오. 또한 파일 이름을 log/somelog.log 또는 somelog.log과 같이 다르게 지정하면 log4j의 작동 방식을 알 수 있습니다.

+0

웁스! 복사 - 붙여 넣기 오류. 또한, 나는 그들의 웹 사이트에서 오늘 log4j를 얻었다. 1.2.16이다. – CrazyPenguin

+0

@Matthew : 1.2.16으로 시도했다. 결과는 동일합니다. 환경에 대한 자세한 정보를 게시하십시오. – darioo

+0

@ 네이선 : 좋은 지적. 새 프로젝트의 경우 항상 [slf4j] (http://www.slf4j.org/) + [logback] (http://logback.qos.ch/index.html)을 권장합니다. – darioo

2

저에게 맞습니다.

log4j가 수행중인 작업과 log4j.log에 로깅하는 이유에 대한 자세한 정보를 얻으려면 -Dlog4j.debug=true을 JVM 매개 변수에 추가하십시오.

관련 문제