몇 주 동안 시도해 본 결과 드디어 해결책을 찾았습니다. 핵심 이벤트는 발견이었습니다. 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 다시 켜졌을 때, 해결 될 수 재설정.
은 누군가가
@rdogpink를 :) 도움이 될 희망 : 당신은 Q & 사이트의 형식을 따라 적절한 대답 아래로 솔루션을 이동해야합니다. 이렇게하면 자신의 대답을 받아 들일 수 있습니다. –
죄송합니다. 먼저 버튼을 처음 보았을 것입니다. 그리고 필자가 글쓰기를 끝내면 아무 것도 없었습니다. 내가 바로 잡을거야! – user357206