2013-11-28 3 views
1

나는 그것에 대해 질문을 본 적이 있지만, 그 중 아무도 나를 도왔습니다. log4j를 사용하고 있지만 콘솔에서 제대로 작동하므로 선언 된 파일에 아무 것도 쓰지 않습니다. 게다가 파일이 생성되었지만 아무것도 저장되지 않았습니다. 코드 :log4j - 로그 파일에 기록되지 않았습니다.

#default 
log4j.rootLogger=ERROR,console 

#Console Appender 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=[%5p] [%t %d{hh:mm:ss}] (%F:%M:%L) %m%n 

#Custom assignments 
log4j.logger.controller=DEBUG,console 
log4j.logger.service=DEBUG,console 
log4j.logger.dao=DEBUG,console 

#Disable additivity 
log4j.additivity.controller=false 
log4j.additivity.service=false 
log4j.additivity.dao=false 

#MyLogger 
log4j.logger.classPath.myClass = INFO, CACHE 

log4j.appender.CACHE=org.apache.log4j.RollingFileAppender 
log4j.appender.CACHE.File = ./logs/cache.log 
log4j.appender.CACHE.bufferedIO = false 
log4j.appender.CACHE.ImmediateFlush=true 
log4j.appender.CACHE.Threshold=info 
log4j.appender.CACHE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CACHE.layout.ConversionPattern=[%5p] [%t %d{hh:mm:ss}] (%F:%M:%L) %m%n 

내가 예상대로 때 additivity=false, 로그가 콘솔에서 보여되지 않기 때문에 로거가 제대로 정의되어 있는지 확인 해요. log4j.logger.myClass = INFO, CACHE, console이 추가되면 콘솔에 로그가 다시 표시됩니다. 그래서 로거 선언은 괜찮아 보입니다. 그렇다면 왜 로그 파일에 표시되지 않습니까?

로거를 사용하려면 org.apache.log4j.Logger.getLogger(myClass.class).info('msg') 구문을 사용하고 있습니다. org.apache.log4j.Logger.getLogger("classPath.myClass").info('msg')도 작동하지 않습니다.

log4j.rootLogger=INFO,console,CACHE을 시도하면 아무 것도 파일에 표시되지 않습니다.

+0

log4j.rootLogger = INFO 콘솔로 변경해보십시오. – Keerthivasan

+0

작동하지 않습니다. 그리고이 출처에 따르면 : http://www.goldenline.pl/ramka/aHR0cDovL2xvZ2dpbmcuYXBhY2hlLm9yZy9sb2c0ai8xLjIvbWFudWFsLmh0bWw= 내 로거의 레벨이 정의 되었기 때문에 상관 없습니다. – Filu

+0

레벨이 MyClass에 대해 정의되었으므로 레벨은 부모로부터 상속받지 않습니다. – Keerthivasan

답변

1

로거 이름이 잘못 지정되었습니다.

#MyLogger 
log4j.logger.MyClass = INFO, CACHE 

대신

잘못 myClass가로 표시된다
#MyLogger 
log4j.logger.myClass = INFO, CACHE 

MyClass에 다음과 같이 변경하십시오. 다음과 같이 로거 인스턴스를 만들 수도 있습니다.

Logger.getLogger("MyClass").info('msg'); 

희망이 있습니다.

+0

사실, MyClass는 실제 이름이 아니라 예제 일뿐입니다. MyClass는 classpath + className 또는 클래스 경로를 의미합니다. 하지만이를 짧은 이름 (예 : myClass)으로 변경하고 Logger.getLogger ("myClass")와 함께 사용하면 여전히 작동하지 않습니다. – Filu

+0

로거는 이름 또는 패키지를 사용하여 인스턴스화 할 수 있습니다. 질문을 완료하십시오. 그래서 도움이 될 것입니다. – Keerthivasan

+0

OK, 나는 약간의 질문을 변경했고, 나는 로거의 선언이 훌륭하다는 것을 분명히했다. 문제는 파일을 기록하는 것입니다. – Filu

관련 문제