log.isDebugEnabled()的使用


轉自: http://huangxx.iteye.com/blog/190693

在使用log4j,common-log這樣的log框架時,發現很多代碼中這樣寫 
if   (log.isDebugEnabled())   { 
          log.debug( "xxxx "); 


我很奇怪,為什么要與log.isDebugEnabled()?既然log.debug()在沒有指定輸出級別為DEBUG時不會有輸出,為什么還要在前面加一個isDebugEnabled()的判斷?

 

為了效率,如果上述那個代碼那么簡單是沒有必要的 

但是如果這樣 
if   (log.isDebugEnabled())   { 
          log.debug(buildFullString()); 
} 

如果這個buildFullString效率不太高,那么如果直接寫log.debug(buildFullString());的話 

雖然它不會打印語句,但是buildFullString還是被執行了,這樣就白費了功夫 

所以加上isDebugEnabled就可以避免執行buildFullString了 

這個方法一般用在認為buildFullString這個函數效率不太高的情況下

 

在log.debug("****")的時候,會先去構造參數的執行結果。如果參數是一個函數表達式,則先回執行函數,然后再判斷是否是debug級別。根據debug級別選擇是否輸出結果。

 public void debug(Object message, Throwable t) {
        if(!this.repository.isDisabled(10000)) {
            if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
                this.forcedLog(FQCN, Level.DEBUG, message, t);
            }

        }
    }

這是log4j中的debug源碼,假設我們的代碼是:

log.debug(buildDebugInfo());
.........
buildDebugInfo()
{
     
  doMuchThings();
     
}
log.debug(buildDebugInfo());在執行的時候,需要先執行buildDebugInfo(),將執行結果傳入到debug()中的message參數中,然后才判斷是否需要打印。 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM