我們有一個模塊化應用程序,其中模塊具有自己的log4j日誌(即通信日誌和錯誤日誌)。這些appender和類別都在覈心log4j XML中配置,但並非所有模塊都始終安裝。 DailyRollingFileAppender創建其文件,不管使用情況如何,並且公開了整套模塊,儘管不存在,並且由於其中一些模塊是特定客戶,我們希望隱藏未使用的日誌。 有沒有辦法使DailyRollingFileAppender首次使用而不是自動啓動時創建它的文件?如何讓log4j只根據需要創建日誌文件?
回答
文件追加程序別無選擇,懶洋洋地創建日誌文件 - 如果不已經setFile
方法會自動創建該文件存在:ostream = new FileOutputStream(fileName, append);
你將不得不延長的appender和覆蓋該文件初始化編寫自己的代碼來獲得你所追求的行爲。
我很欣賞這個答案有點晚,但是我最近一直在和Log4j進行太多的爭鬥,不願意留下懸念:-) – Andy 2010-11-08 15:38:43
我只需要咬那個子彈然後...... – Mirvnillith 2010-11-15 13:49:01
我有同樣的問題,所以我擴展了標準的FileAppender類,並且創建了一個新的LazyFileAppender,這是一個FileAppender,它懶散地初始化日誌文件(僅當第一次寫入操作發生時才創建它)。
LazyFileAppender和標準log4j庫的一些其他附加功能可以在我創建的簡單庫中找到:log4j-additions。
你可以看一下源開發自己的擴展,或者您可以使用它作爲是...
擴展標準FileAppender類是不成功我。所以我發現了另一個解決方案,它使用appender以編程方式創建日誌文件(僅在名稱文件中使用時間戳)。我寫了這兩種方法:
public void startLog() {
SimpleDateFormat sdf_long = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
FileAppender fa = new FileAppender();
fa.setName("foo");
fa.setFile(sdf_long.format(new Date()) + ".log");
fa.setLayout(new PatternLayout("%d{HH:mm:ss.SSS} %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
Logger.getRootLogger().addAppender(fa);
}
public void stopLog() {
Logger.getRootLogger().getAppender("foo").close();
Logger.getRootLogger().removeAppender("foo");
}
我的log4j.properties文件只配置控制檯appender。當我想開始記錄時,我調用startLog()方法。當我想登錄其他文件時,我先調用stopLog(),然後再調用startLog()方法。
- 1. log4j如何每天自動創建一個新的日誌文件而不需要歸檔舊日誌文件
- 2. log4J爲方法創建日誌文件
- 3. Log4j 1.2.17 - 如何根據文件大小執行日誌滾動
- 4. 如何使用Log4j創建基於進程的日誌文件?
- 5. 如何根據日期創建文件?
- 6. log4j按需創建文件
- 7. 需要爲jar文件創建單獨的日誌文件嗎?
- 8. 如何根據需要創建目錄?
- 9. 不需要的依賴日誌與log4j
- 10. log4net - 只創建一個日誌文件
- 11. 使用Log4j創建每日日誌?
- 12. 解析log4j日誌文件
- 13. 多個log4j日誌文件
- 14. Log4j 2日誌正在寫入Log4j日誌文件
- 15. 如何創建「pop_front」的日誌文件?
- 16. 在運行時創建log4j日誌文件名
- 17. Log4j設置爲不創建零大小的日誌文件?
- 18. Log4j運行jar文件時不會創建日誌
- 19. Spark應用程序log4j日誌文件未創建
- 20. 使用log4j創建不同的日誌文件
- 21. log4j的2:日誌文件被創建,但未被寫入
- 22. 未創建日誌文件
- 23. 創建日誌文件C#
- 24. VBA創建日誌文件
- 25. 未創建日誌文件?
- 26. 使用Log4j的日期日誌文件
- 27. 如何在每個程序執行的log4j中創建日誌文件?
- 28. 根據創建日期刪除文件
- 29. 複製文件,根據需要在Ruby中創建目錄
- 30. 如何創建log4j的包,並得到正確的日誌
爲什麼不在覈心XML中排除禁用組件的塊? – newtover 2010-04-27 09:41:42
我們正在部署log4j配置oonce,然後可以添加模塊。在我們將log4j的詳細信息打開以進行本地更改時,我們很難在以後的安裝中修改該文件。 是的,我們需要高水平的安裝自動化。 – Mirvnillith 2010-04-29 08:26:42