2010-06-16 37 views
0

我在我的项目中使用log4j,并希望将FallbackErrorHandler用于备份原因。因此,当我想要实现FallbackErrorHandler时,必须使用DOMConfigurator,并使用XMLConfigurationfile。但现在,我的客户并不真的喜欢XML并寻找方法,他可以自己配置Logging-行为,我有想到在java-properties的帮助下加载基本配置,并实例化更高级的Appender或ErrorHandler与Java代码,我可以配置参数。Log4j:使用属性配置FallbackErrorHandler

ErrorHandler的配置工作到目前为止,log4j-debug显示所有东西都是正确的,但是我遇到了一个问题,直到现在还没解决。我的FallbackErrorHandler开始记录到已经在程序的开始处的backupAppender ,而不是当标准appender失败时。我无法弄清楚我做错了什么,如果有人想看看它,我可以发布属性代码和java代码,但起初我想问一下,是否有人遇到同样的问题或者有在Java中配置log4j的经验?

+0

@rdogpink:你应遵循的问答网站的格式和移动解决方案到一个合适的回答。这将允许你接受你自己的答案。 – 2010-07-08 12:57:04

+0

对不起,我想我只是简单地监督了Button,当我写完时,没有。我会纠正它! – user357206 2010-07-08 13:53:35

回答

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只是一个占位符,这样我就可以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当追加程序是上再次,可以解决通过重新启动配置()复位。

希望它可以帮助别人:)