今天团队讨论一个问题,在我们进行日志记录的时候,到底应不应该在前面加上 isDebugEnabled()这种判断?

1
2
3
if (logger.isDebugEnabled ()) {
logger.debug("This is debug message from Dao.");
}

或者直接使用:

1
logger.debug("This is debug message from Dao.");

为了解决这个问题,我查看了一下debug()的源码:

1
2
3
4
5
6
7
public void debug(Object message) {
if(repository.isDisabled(Level.DEBUG_INT))
return;
if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
forcedLog(FQCN, Level.DEBUG, message, null);
}
}

由此可以看出,我们在执行debug方法的时候已经执行了日志级别的判断。所以是不是isDebugEnabled()这类方法就用不到了呢?

并不是! 如果你的debug写法是这样的

1
logger.debug("debug信息测试"+serivce.getScore());

这个时候你就需要加上if判断了,如下:

1
2
3
iflogger.isDebugEnabled() ){
logger.debug("debug信息测试"+serivce.getScore());

因为执行serivce.getScore()是需要时间花销的,所以从系统运行效率上来讲我们应该加上if判断,但是如果是debug信息中的变量参数执行效率可以忽略不计,

1
logger.debug("debug信息测试"+param);


结论:

到底在打印日志信息是是够需要加上判断,要根据实际情况进行判断, 如果debug()中的参数没有变量, 或者变量执行时间短,我们则可以不加if判断,反之则需要加上if判断。