差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
java:log4j:config_watchdog [2013/03/14 00:57] tony |
java:log4j:config_watchdog [2023/06/25 09:48] (目前版本) |
||
---|---|---|---|
行 2: | 行 2: | ||
====== FileWatchDog for Configuration ====== | ====== FileWatchDog for Configuration ====== | ||
===== Problem ===== | ===== Problem ===== | ||
- | 在軟體開發與debug的時候,為了幫助了解程式做到什麼地方、發生問題在哪或狀態如何,會使用log去記錄重要的執行過程。但每次修改完log4j property file為了讓它生效,會重新啟動應用程式讓它reload,但這樣不是很煩嗎?為了解決這樣問題,我們可以透過Log4J提供的PropertyWatchdog去polling property file是否有做過修改,使用也只要透過PropertyConfigurator的configureAndWatch就可以了,預設是60秒check一次。 | + | 在軟體開發與debug的時候,為了幫助了解程式做到什麼地方、發生問題在哪或狀態如何,會使用log去記錄重要的執行過程。但每次修改完log4j property file為了讓它生效,會重新啟動應用程式讓它reload,但這樣不是很煩嗎?為了解決這樣問題,我們可以透過Log4J提供的PropertyWatchdog去polling property file是否有做過修改。如以下程式碼,透過PropertyConfigurator的configureAndWatch就可以了,預設是60秒check一次。 |
<code java> | <code java> | ||
org.apache.log4j.PropertyConfigurator.configureAndWatch(aLogPropertyFilePath); | org.apache.log4j.PropertyConfigurator.configureAndWatch(aLogPropertyFilePath); | ||
行 58: | 行 58: | ||
</code> | </code> | ||
於是重頭開始trace PropertyConfigurator,在parseCategory中發現它會透過logger的removeAllAppenders,將可能原有的Appender都close掉,且它每一個Appender都是相同的instance。這會造成什麼問題? 因為Log4j在做config的時候,會根據你所設定的package去加入Appender。如果你移除了某些package,又或者像是Problem中增加package的child而不保留原本的。**原先的package並沒有被Log4j回收或清除**,它在執行log時,會使用原本設定在它身上的Appender,跟著就死翹翹啦!\\ | 於是重頭開始trace PropertyConfigurator,在parseCategory中發現它會透過logger的removeAllAppenders,將可能原有的Appender都close掉,且它每一個Appender都是相同的instance。這會造成什麼問題? 因為Log4j在做config的時候,會根據你所設定的package去加入Appender。如果你移除了某些package,又或者像是Problem中增加package的child而不保留原本的。**原先的package並沒有被Log4j回收或清除**,它在執行log時,會使用原本設定在它身上的Appender,跟著就死翹翹啦!\\ | ||
- | \\ | + | |
- | 友藏內心獨白: 沒人會想深入了解真正原因吧! | + | |
===== Reference ===== | ===== Reference ===== | ||
* [[http://blog.csdn.net/bxyz1203/article/details/7645185|log4j:ERROR Attempted to append to closed appender named的問題]] | * [[http://blog.csdn.net/bxyz1203/article/details/7645185|log4j:ERROR Attempted to append to closed appender named的問題]] |