终论到底该不该写isDebugEnabled

Posted hbuuid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终论到底该不该写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()判断,就会执行两遍判断。犹如脱裤子放屁。

以上是关于终论到底该不该写isDebugEnabled的主要内容,如果未能解决你的问题,请参考以下文章

程序员到底该不该写好你的代码?

小辩《降薪求职,到底该不该?》

到底该不该从开发转测试

到底该不该人比人

程序员面试,到底该不该穿正装?

到底该不该使用存储过程