問題:框架
在使用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