2011-06-08 29 views
1

我有以下代碼:我們可以在運行時更改單個日誌語句的日誌記錄級別嗎?

private static final Log LOGGER = LogFactory.getLog(MyClass.class); 
if (LOGGER.isErrorEnabled()) { 
    LOGGER.error("ID_1: Log Message: " + parameter)); 
} 

而且我想的嚴重程度設置爲WARNFATAL

如果我能夠在運行時更新log4j.properties,那麼我將如何更改此消息的嚴重性?使用log4j.logger.com.foo=WARN只會改變整個軟件包的嚴重程度。

有沒有更具體的方法? 我們可以在運行時更改單個日誌記錄語句的日誌記錄級別嗎?

回答

3

簡短的回答是不,你不能。

要做你想做的事情,你需要更改代碼來調用採用Level作爲參數的Logger方法,並替換guard;例如

if (logger.isEnabledFor(level)) { 
    logger.log(level, "ID_1: Log Message: " + parameter, null); 
} 

而且我不認爲這會幫助,因爲你再有獲得正確的值成level變量的問題。

更好的選擇是創建一個具有唯一名稱的記錄器,並且只能在該特定語句中使用。然後,您可以獨立於任何其他語句來控制該語句的日誌記錄(通過日誌記錄配置)。

或者更現實的說,可以使用類名或包名來命名您的記錄器。這使您比單個全局記錄器更加細化......而無需創建瘋狂數量的Logger實例。

+0

之所以改變代碼使用日誌級別的一個問題就是,因爲我們有數百個組件需要改變。但是,謝謝你的簡短答案。 – mahler 2011-06-08 10:42:10

+0

@mahler - 像這樣大規模的變化並不像你想象的那麼不切實際。事實上,這種變化是非常機械的......如果不是以完全/大部分自動化的方式完成的話。 – 2011-06-08 11:40:31

0

可以使用Log4j和日誌的方法,它採取的LogLevel作爲參數時指定的LogLevel:

Logger l = Logger.getLogger(this.getClass()); 
l.log(Level.WARN, message); 
l.log(Level.ERROR, message); 
l.log(Level.ERROR, message, throwable); 
相關問題