log 为什么使用isDebugEnable()和isTraceEnabled()

今天看源码,发现许多框架的log部分都会有log.isTraceEnabled()之类的判断,然后再进行调用trace()打印日志。
我不禁想,为什么不直接使用log.trace(),结果不是一样吗。但细细想来,肯定有原因的。

再看看if(isTraceEnabled()){}中的内容,有些打印日志的字符是比较多的,如果不判断直接调用的话,势必造成大量的资源消耗,如字符串拼接和对象toString()的操作。如下:

if (log.isTraceEnabled()) {
log.trace("attempting to get session; create = " + create +
"; session is null = " + (this.session == null) +
"; session has id = " + (this.session != null && session.getId() != null));
}

原因就是这样~~