2010-06-16 5 views
0

내 프로젝트에서 log4j를 사용하고 백업 이유에 FallbackErrorHandler를 사용하려고했습니다. 따라서 FallbackErrorHandler를 구현하려면 DOMConfigurator와 XML-Configurationfile을 사용해야합니다.Log4j : 속성을 사용하여 FallbackErrorHandler 구성

하지만 지금은 고객이 XML을 좋아하고 길을 찾고있어 로깅 동작을 직접 구성 할 수 있습니다. Java 속성을 사용하여 기본 구성을로드하고 아이디어를 높여서 자바 코드가있는 Appender 또는 ErrorHandler. 매개 변수로 구성 할 수 있습니다.

ErrorHandler의 구성이 지금까지 효과가 있었지만 log4j 디버그가 모든 것을 올바르게 보여 주었지만 아직까지 해결할 수 없었던 문제가 발생했습니다. 내 FallbackErrorHandler는 의 초기에의 프로그램에서 backupAppender에 로깅하기 시작합니다. 표준 애플릿이 실패한 경우가 아닙니다. 내가 잘못한 것을 알아낼 수 없었다. 누군가가 그것을보고 싶어한다면 자바 코드와 속성의 코드를 게시 할 수 있지만, 처음에는 누군가가 같은 문제에 부딪혔는지 물어보고 싶었다. 또는 Java에서 log4j를 구성 할 때 경험이 있습니까?

+0

@rdogpink를 :) 도움이 될 희망 : 당신은 Q & 사이트의 형식을 따라 적절한 대답 아래로 솔루션을 이동해야합니다. 이렇게하면 자신의 대답을 받아 들일 수 있습니다. –

+0

죄송합니다. 먼저 버튼을 처음 보았을 것입니다. 그리고 필자가 글쓰기를 끝내면 아무 것도 없었습니다. 내가 바로 잡을거야! – user357206

답변

1

몇 주 동안 시도해 본 결과 드디어 해결책을 찾았습니다. 핵심 이벤트는 발견이었습니다. PropertyConfigurator에는 ErrorHandler 클래스가 있지만, Geki는 PropertyConfigurator를 사용하여 ErrorHandler를 구성 할 가능성이 없다고 기록했습니다. 그래서 나는 계속 노력했다.

이제 log4j.properties의 기본 선언을 JavaCode의 Logger, Appender 및 ErrorHandler의 링크와 간단히 결합 할 수 있습니다. 내 속성에서 그래서 다음과 같은 약자

log4j.appender.ServerAppender=org.apache.log4j.FileAppender 
log4j.appender.ServerAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.ServerAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %F - %m%n 
log4j.appender.ServerAppender.file=logs/ServerLog.txt 
log4j.appender.ServerAppender.threshold=DEBUG 

log4j.logger.com.foo.server=TRACE, ServerAppender 

log4j.appender.ServerAppender.errorhandler=org.apache.log4j.varia.FallbackErrorHandler 
log4j.appender.ServerAppender.errorhandler.logger-ref=com.foo.server 
log4j.appender.ServerAppender.errorhandler.appender-ref=FallbackServerAppender 

log4j.appender.FallbackServerAppender=org.apache.log4j.FileAppender 
log4j.appender.FallbackServerAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.FallbackServerAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %F - %m%n 
log4j.appender.FallbackServerAppender.file=C:/Temp/Test/fallbackServerLog.txt 

log4j.logger.com.foo.error=DEBUG,FallbackServerAppender 

com.foo.server 내 패키지 계층의 일부이지만은 com.foo.error은 자리 표시 자입니다, 그래서 자바 코드 내에서 호출 할 수 있습니다. 그렇게 보일거야. 또는 상황 정상적으로 정상이 appender 그렇지 않으면 .. 후 로그 방법 -

PropertyConfigurator.configure(LOG4JCONFIG); 
FallbackErrorHandler fbeh=(FallbackErrorHandler)LogManager.getLogger("com.foo.server").getAppender("ServerAppender").getErrorHandler(); 
fbeh.setLogger(LogManager.getLogger("com.foo.server")); 
fbeh.setAppender(LogManager.getLogger("com.foo.server").getAppender("ServerAppender"));   
fbeh.setBackupAppender(LogManager.getLogger("com.foo.error").getAppender("FallbackServerAppender")); 

알려진 문제점은 fallbackErrorHandler는 나던 구성()를 다시 시작하여이 appender 다시 켜졌을 때, 해결 될 수 재설정.

은 누군가가