我想在啓動時配置appender,然後根據需要動態添加並從各種記錄器中刪除它。我寧願讓log4j自己配置這個appender,並且在需要的時候抓住它的引用。如果這是不可能的,我將不得不自己實例化appender並堅持下去。如何在運行時訪問配置的Log4J appender?
回答
的Logger類有方法來getAllAppenders(),getAppender(),addAppender(),和removeAppender()方法,從Category類繼承。然而,Category類別已被棄用,除此之外,我從未嘗試過這樣做,但這可能是一個有用的起點。
「類別」已被「Logger」類取代。 'Logger'只是從'Category'繼承而來。所以,如果'Category'的方法本身不被棄用,那麼使用它就很好。 – 2009-12-15 19:57:39
使用getAppender()或getAllAppenders()是否假定appender已經在Logger上?我想在啓動時配置Appender,但不要在啓動時將它附加到任何類別。只有在運行時,我才能抓住它來在Logger上調用addAppender()。 – 2009-12-15 20:04:00
您可以根據需要製作Appender並添加它。 – 2009-12-15 20:05:50
Appender通常被添加到根記錄器。下面是一些僞
// get the root logger and remove the appender we want
Logger logger = Logger.getRootLogger();
Appender appender = logger.getAppender("foo");
logger.removeAppender(appender)
// when we want to add it back...
logger.addAppender(appender);
我敢肯定,你可以做到這一點其他伐木者比根記錄爲好,雖然我從來沒有嘗試過。
對,我知道如果它已經被配置爲連接到記錄器,我可以從記錄器中獲取appender。但是,我正在尋找一種方法來獲取在啓動時配置的appender,它不是*已經連接到記錄器。 – 2009-12-15 20:45:22
我想要做同樣的事情。我想在log4j.properties中配置appender,然後選擇一些並在運行時動態添加到rootLogger。
我無法弄清楚如何通過一個記錄器訪問以外的追加程序到他們被連接,所以我結束了創建一個僞記錄,並附加了追加程序來,所以我可以動態獲取它們。這並不理想,因爲即使沒有使用appender使用的任何資源(例如文件)也會被預先創建。
我認爲這真的是唯一的解決方案。 appender註冊表是[PropertyConfigurator](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html)或[DOMConfigurator](http://logging.apache.org /log4j/1.2/apidocs/org/apache/log4j/xml/DOMConfigurator.html)。一旦完成,PropertyConfigurator甚至會清除它的註冊表。 – James 2011-07-20 01:29:35
我會做這種方式:
- 你在log4j.properties追加程序規定,但不添加到根記錄。
- 在運行時,當需要時,抓住log4j.properties,從中提取你需要的屬性,實例化你的appender並通過讀取提取的屬性來設置它的選項。
- 激活appender
- Logger.getRootLogger()。addAppender(appender);
- 踢它的時候使用它結束了 - 。Logger.getRootLogger()removeAppender(..)現在
,如果這是你自己的appender,這樣做(2)將因爲你知道的意思是容易屬性和知道什麼期望。否則,在做(3)之前,您可能會想使用反射來實例化該類並調用其屬性設置器。
如果它在運行時啓用/禁用Appender,那麼我會發現另一個解決方案(儘管不是很優雅)。使用log4j配置,添加您通常需要的所有Appender。
在運行時,當您想「禁用」appender時,添加一個對其每個日誌消息都返回Filter.DENY的過濾器(org.apache.log4j.spi)。這種方式沒有消息通過這個Appender。當你想「啓用」Appender時,只需清除上面添加的過濾器即可。
我測試了這個,它適用於我們(log4j 1.2)。
- 1. 如何在運行時更改log4j appender?
- 2. log4j appender配置
- 3. 在運行時檢索Log4J Appender列表
- 4. 如何傳遞參數在運行時的log4j的一個appender
- 5. log4j與grails:如何在運行時獲取appender文件名?
- 6. log4j配置問題
- 7. log4j的2配置問題
- 8. 如何進行簡單的log4j配置?
- 9. Log4j:配置JDBC appender使用數據源
- 10. 如何最好地複製配置的Log4j Appender
- 11. 如何使用anorm在運行時配置數據庫訪問?
- 12. 如何在運行時訪問Rails配置值?
- 13. 配置ELK + log4j
- 14. 如何設置log4j配置文件
- 15. Log4j配置
- 16. 問題的log4j的XML配置
- 17. 如何在springframework的JSON配置中配置log4j 2?
- 18. 與log4j Java配置有關的問題
- 19. log4j調試不記錄到任何配置的appender
- 20. log4j的配置
- 21. Java Log4J 2 - 在xml中配置自己的appender
- 22. 如何配置Log4cplus Syslog Appender
- 23. Log4j2 - 如何配置JDBC Appender?
- 24. 運行單元測試時未調用Mockito模擬log4j appender
- 25. log4j的UTC日期時間配置
- 26. Log4j SMTP Appender
- 27. Log4j appender大小
- 28. Log4J Swing Appender
- 29. JDBC-appender Log4j
- 30. Log4j「後備」appender
我想要做同樣的事情。我想在log4j.properties中配置appender,然後選擇一些並在運行時動態添加到rootLogger。 – Joel 2010-01-28 11:52:34