标签:没有 class 执行 源码 cti 多少 形参 bug col
以前:
很多日志框架都不支持{}
模板的写法(如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()
判断,就会执行两遍判断。犹如脱裤子放屁。
标签:没有 class 执行 源码 cti 多少 形参 bug col
原文地址:https://www.cnblogs.com/hbuuid/p/13396174.html