2011-12-12 38 views
0

我對log4j的類別有一些懷疑。Log4j:多個類別與專精

我有三類...

  • Program
  • Program.BUILD
  • Program.QUERY

當我定義以下log4j.properties:

log4j.logger .P rogram = DEBUG,標準輸出,文件

log4j.logger.program.BUILD = DEBUG,文件

,並在Java中我打電話:

Logger logger = Logger.getLogger("program.BUILD"); 

假設stdout和文件是附加器分別控制和文件。

我的問題是,當我指定兩個類別,如圖所示,`program.BUILD日誌的寫入控制檯和文件。但他只是爲文件appender指定的。 log4j然後使它成爲繼承?

我想指定三個類別,但是如果指定,他只捕獲program.BUILD該類別中指定的內容,而不使用通用類別(程序)。 但是,如果未指定,則類別program.QUERYprogram.BUILD正在選取程序類別,因爲它代表未指定的兩個類別。

我該怎麼做?

回答

1

是的,Log4j有一個繼承系統。您可以使用「additivity = false」標誌禁用它(也就是說,不要讓日誌消息冒泡到父類別)。

對於給定的記錄器每個啓用日誌請求將在記錄器,以及在 層次更高的附加目的地被轉發到 所有追加程序。換句話說,appender是從 記錄器層次繼承的。例如,如果控制檯appender被添加到根日誌記錄器 ,則所有啓用的日誌記錄請求將至少在控制檯上打印 。如果另外文件appender被添加到記錄器, 說C,然後啓用記錄請求C和C的孩子將在文件和控制檯上打印 。可以覆蓋此默認行爲,以便appender累積不再通過 將可加性標誌設置爲false。

(見http://logging.apache.org/log4j/1.2/manual.html

+0

@Croisier我在哪裏添加此標誌 「相加=假」?在記錄器對象是program.BUILD與命令logger.setAdditivity(false)?如果我不設置program.BUILD,它會繼承程序嗎? –

+0

像這樣(假設你使用.properties基於文件的配置):log4j.additivity.program。BUILD = false –

+0

感謝您的幫助,這項工作適合我。 –