码迷,mamicode.com
首页 > 其他好文 > 详细

logger.isDebugEnabled()作用

时间:2017-01-17 14:09:33      阅读:1143      评论:0      收藏:0      [点我收藏+]

标签:输出   effect   为什么   this   复杂   bsp   eve   isa   int   

项目中经常会用到:
if (logger.isDebugEnabled()) {
    logger.debug( "message:" + user.getMessage() );
}
我们会想当然得认为这段代码作用是为了控制日志文件的输出,但是通过查看源码我们会发现,在debug()方法中做了与isDebugEnabled()方法一样的判断,因此我们在需要输出日志的地方直接调用debug方法也可以达到控制输出的目的。
以下是isDebugEnabled()以及debug()方法的源码:

public boolean isDebugEnabled() {    

  if(repository.isDisabled( Level.DEBUG_INT))

    return false;

  return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());

}

public void debug(Object message) {

  if(repository.isDisabled(Level.DEBUG_INT))

    return;

  if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {

    forcedLog(FQCN, Level.DEBUG, message, null);

  }

}

那么我们为什么还要多此一举,加上这样一个判断语句呢?

官方的说法是:出于效率考虑,看具体情况而定。

首先我们看以下代码:

log.debug( "message:" + user.getMessage() );
假如我们的日志级别为info,那么这句话不会被输出,但是这样写,这个方法还是会调用,因此getMessage()方法还是会执行。如果getMessage()这个方法过于复杂,需要很长时间来执行。而参数构造完之后,我们进入debug()方法进行判断:
    if(repository.isDisabled(Level.DEBUG_INT))
        return;
在这里就返回了。这样会导致我们什么都没有做但却耗费了时间,如果并发量大的时候,对性能的影响就比较明显了。
    这个时候,出于性能的考虑,我们就应当添加isDebugEnabled()判断
    if (logger.isDebugEnabled()) {

        logger.debug( "message:" + user.getMessage() );

    }
但是如果是这样简单的输出:
    logger.debug(“error”);
添加判断就没有必要了。

logger.isDebugEnabled()作用

标签:输出   effect   为什么   this   复杂   bsp   eve   isa   int   

原文地址:http://www.cnblogs.com/crisy0513/p/6292561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!