终论到底该不该写isDebugEnabled
Posted hbuuid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终论到底该不该写isDebugEnabled相关的知识,希望对你有一定的参考价值。
以前:
很多日志框架都不支持{}
模板的写法(如Log4j1.X
, Apache 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的主要内容,如果未能解决你的问题,请参考以下文章