经过几个星期的努力,我终于找到了解决方案。关键事件是发现,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