终论到底该不该写isDebugEnabled

以前:

很多日志框架都不支持{}模板的写法(如Log4j1.XApache Commons Logging),于是只能通过字符串拼接来输出日志内容:

log.debug("debug日志 " + info);

这样一来,每当JVM执行到此时,不管你当前的日志级别是多少,都会执行一次字符串拼接,然后将结果做为形参传递给debug()方法,这样就带来了无用的性能损耗。这时,提前判断isDebugEnabled()可以解决此问题:

if (log.isDebugEnabled()) {
    log.debug("debug日志 " + info); 
}

后来:

但是,后来这种写法实际上没有必要了,绝大多数日志框架都支持了{}语法。如果你使用{}语法:

log.debug("debug日志{}", info);

看源码就可以知道,这种写法不会先进行日志内容的拼接了(就不会有多余的消耗,前提是info不是function,只是一个常量),直接会走到判断日志输出级别的逻辑。因此加上log.isDebugEnabled()判断,就会执行两遍判断。犹如脱裤子放屁。

posted @ 2020-07-29 11:40  下午喝什么茶  阅读(141)  评论(0编辑  收藏  举报