列印日誌時為什麼要使用isDebugEnabled 、isInfoEnabled

韓師學子--胖佳發表於2019-02-21

    列印日誌時為什麼要使用isDebugEnabled 、isInfoEnabled


轉載:https://blog.csdn.net/hjun01/article/details/41442567

對於列印的資訊沒有字元拼接或者物件(說白了沒有tostring的方法呼叫),如果列印的資訊是固定字串的話,就加上面的判斷和不加其實意義是一樣的

log4j中log.isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled()作用
專案在應用log4j列印Debug,Info和Trace級別的log時需要加上對應的三個方法進行過濾,程式碼如下:

if (log.isDebugEnabled()) {
    log.debug(" From: " + req.getFrom().toString() + 
                  " To: " + req.getTo().toString() + 
                  " CallId: " + req.getCallId() + 
                  " msg:" + msg);
}


其作用是因為Debug,Info和Trace一般會列印比較詳細的資訊,而且列印的次數較多,如果我們不加log.isDebugEnabled()等
進行預先判斷,當系統loglevel設定高於Debug或Info或Trace時,雖然系統不會答應出這些級別的日誌,但是每次還是會拼接
引數字串,影響系統的效能。

2.錯誤的優化方法
部分編碼人員因為不瞭解機制,從程式碼複用性和簡潔性而言定義如下函式來封裝

    private void debug(String msg) {
        if (log.isDebugEnabled()) {
            log.debug(msg);
        }
}


其實這種封裝方式是錯誤的,因為當系統中呼叫debug(msg)函式還是出現字串的拼接

相關文章