2012-01-31 13 views
1

log4j大多數(如果不是全部)appender擴展AppenderSkeleton它提供了一個setThreshold(Priority)方法設置消息必須設置爲最低「級別」,以便appender將其記錄在某處。如何路由log4j消息到唯一的appender

我想根據消息的級別/優先級精確將消息記錄到不同的appender。例如,我想要DEBUG消息登錄到ConsoleAppender,但沒有其他地方。我想INFO消息登錄到FileAppender和其他地方。我想要ERROR消息登錄到JMSAppender和其他地方。

問題是這setThreshold(Priority)方法,它設置記錄消息所需的「最小閾值」。

當然,我可以將ConsoleAppender的閾值設置爲DEBUG,但由於INFO和ERROR消息比DEBUG消息「更高」,我也會將INFO和ERROR消息發送給ConsoleAppender。

是否有方法或方法配置appender「水平」/優先究竟或者是這個最低門檻我唯一的追索?使用LevelMatchFilter

編輯:
這是朝着正確方向邁出的一步?

LevelMatchFilter filter = new LevelMatchFilter(); 
filter.setLevelToMatch(Level.DEBUG.toString()); 

consoleAppender.addFilter(filter); 

會上面的代碼片斷完成,確保了ConsoleAppender日誌調試的工作,只有調試?

回答

0

您可以將LevelMatchFilter附加到任何appender上,以僅按確切級別過濾日誌消息。

根據JavaDoc:

這是一個基於電平匹配一個非常簡單的過濾器。

該過濾器允許兩個選項LevelToMatchAcceptOnMatch。如果LevelToMatch選項的值與LoggingEvent的值完全匹配,則decide(org.apache.log4j.spi.LoggingEvent)方法返回Filter.ACCEPT,以便AcceptOnMatch選項值設置爲true,如果該值爲false,則返回Filter.DENY。如果沒有匹配,則返回Filter.NEUTRAL

+0

謝謝jalopaba - 請看看我編輯的(添加的)代碼段,並讓我知道如果我錯誤地使用它。再次感謝! – IAmYourFaja 2012-01-31 16:21:57