我想通过在 Log4J2 中使用惰性日志记录来提高我的日志记录效率。这意味着我正在使用 lambda,它仅在日志级别正确/满足时执行。例子:List<Integer> someList = Arrays.asList(1,2,3);
log.info("Size of list is {}.", () -> someList.size());我的 IDE 告诉我,我可以用方法引用替换这个符号,如下所示:log.info("Size of list is {}.", someList::size);我现在的问题是:这种方法(方法参考)是否仍然具有惰性日志记录的好处,即昂贵的计算任务仅在日志记录中执行,当日志级别达到时,或者我是否失去了全部好处,当我'我没有明确使用 lambdas 吗?
1 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
查看 Log4j2 源代码,您会发现该类Logger
定义Supplier<?>
为使其惰性,例如在您可以找到的AbstractLogger.logIfEnabled()
方法之一中:
@Override
public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
final Supplier<?>... paramSuppliers) {
if (isEnabled(level, marker, message)) {
logMessage(fqcn, level, marker, message, paramSuppliers);
}
}
Supplier<?>
只有在启用关卡时才会调用 ,使其变得懒惰。
Supplier
如果您提供使用 lambda、方法引用或通过编写new Supplier() { }
匿名类,这没有区别。您可以看看Do lambda expressions have any use except saving lines code? 了解这些方法之间的细微差别的问题,但最重要的是它们会很懒惰。
添加回答
举报
0/150
提交
取消