2014-02-14 78 views
6

我正在開發一個使用NetBeans平臺的項目。在引擎蓋下,NetBeans使用java.util.logging框架。如何發送java.util.logging到log4j2?

我想攔截這些日誌調用通過綁定java.util.logginglog4j2。這可能嗎?

先前的問題已被詢問是相似的,但是特定於log4j而不是log4j2

回答

0

我已經找到了解決方案:

NetBeans平臺名稱記錄器org.netbeans.*命名空間。若要將NetBeans的記錄來電,我只是創造了一個Handler並與org.netbeans記錄儀註冊吧:

public class CustomHandler extends Handler 
{ 
    @Override 
    public void publish(LogRecord record) 
    { 
     // Re-direct log calls here (e.g. send record to Log4j2 logger). 
    } 

    @Override 
    public void flush() 
    { 
    } 

    @Override 
    public void close() throws SecurityException 
    { 
    } 
} 

一定要登記,如果有必要的新Handler和禁用父記錄器:

Logger logger = Logger.getLogger("org.netbeans"); 
logger.addHandler(new CustomerHandler()); 
logger.setUseParentHandlers(false); 
16

UPDATE 2014/9/12:從版本2.1開始,Log4j 2包含一個不需要SLF4J的JUL bridge

不需要自定義代碼。兩件事情:

  1. 把下面的罐子在classpath: 的log4j-API的2.x中,log4j的核心 - 2.x和log4j的 - 07月2.X。

  2. 設置系統屬性java.util.logging.managerorg.apache.logging.log4j.jul.LogManager任何呼叫到日誌管理或記錄儀由前

的Log4J2 FAQ頁面顯示的依賴視覺: http://logging.apache.org/log4j/2.x/faq.html#which_jars

+1

我從來沒有想使用SLF4J。我有一個自定義的Log4j2作爲Facade的包裝器。我找到了一個解決方案並將發佈它。 – bblincoe