if (log.isDebugEnabled()) 使用場景

問題:框架

在使用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這個函數效率不過高的狀況下 。ui

加不加if,效果相同,可是效率不一樣。在你的例子裏,debug的參數就是一個string,因此沒有太本質的差異。可是假如log.debug( "map= "   +   map) 的話,在調用debug以前,必然須要調用map.toString(),而這個操做可能致使更多的大量字符串操做,最後,才能獲得這個辛辛苦苦拼接出來的結果,做爲參數傳入debug(),結果,這個參數卻不須要(通常在log方法入口就判斷輸出level)。  debug

相關文章
相關標籤/搜索