2010-06-16 112 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當追加程序是上再次,可以解決通過重新啓動配置()復位。

希望它可以幫助別人:)