2011-10-05 46 views
3

我有一個具有log4j日誌記錄的java項目。它使用滾動文件appender和多個記錄器來登錄到文件。 我想添加一個DBappender並有一個獨立的記錄器,只寫入這個appender,沒有其他記錄器發送消息給它。我需要說一個類有兩個記錄器,一個寫入fileAppender,一個寫入dbAppender。這是可能的,如果是這樣的話,它的配置是什麼?LOG4J同一類中的多個記錄器

感謝

回答

5

有可能在一個類中使用兩個Logger秒。

第一個想法:把兩個記錄器以不同的名稱:

package com.mycompany.apackage.MyClass; 

public class MyClass { 
    private static final logger = Logger.getLogger(Myclass.class) 
    private static final dbLogger = Logger. 
     getLogger(Myclass.class.getName() + ".dblogger") 
} 

配置程序包的dbLogger的:

<root> 
    <appender-ref ref="mainlog" /> 
</root> 

<logger name="com.mycompany.apackage.MyClass.dblogger"> 
    <appender-ref ref="dbappender" /> 
</logger> 

(未測試)。 在這種情況下,dbLogger也會記錄到mainlog appender。如果不合適,您可以在mainlog(和其他)appender中使用 自定義篩選器,篩選出dbLogger的消息。另一種解決方案是使用一種完全不同的前綴爲dbLogger

private static final logger = Logger.getLogger(Myclass.class) 
    private static final dbLogger = Logger. 
     getLogger("dblogger." + Myclass.class.getName()) 

Log4j的配置:

<root> 
</root> 

<logger name="com.mycompany"> 
    <appender-ref ref="mainlog" /> 
</logger> 
<logger name="dblogger.com.mycompany"> 
    <appender-ref ref="dbappender" /> 
</logger> 

需要注意的是,如果你傳遞給getLogger()方法相同的參數,你會得到同樣的Logger對象,所以你必須使用不同的名稱。

相關問題