首页 > 代码库 > logger.isDebugEnabled()作用
logger.isDebugEnabled()作用
项目中经常会用到:
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()作用