问题:框架
在使用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