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

相关文章
相关标签/搜索