經過幾個星期的努力,我終於找到了解決方案。關鍵事件是發現,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只是一個佔位符,這樣我就可以Java的代碼中調用它。這看起來像這樣。方法或情況,其中通常是正常的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 doesn't當追加程序是上再次,可以解決通過重新啓動配置()復位。
希望它可以幫助別人:)
@rdogpink:你應遵循的問答網站的格式和移動解決方案到一個合適的回答。這將允許你接受你自己的答案。 – 2010-07-08 12:57:04
對不起,我想我只是簡單地監督了Button,當我寫完時,沒有。我會糾正它! – user357206 2010-07-08 13:53:35