为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Log4J2 进行延迟日志记录中的“Lambda 可以用方法引用替换”

使用 Log4J2 进行延迟日志记录中的“Lambda 可以用方法引用替换”

饮歌长啸 2023-03-17 15:25:29
我想通过在 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? 了解这些方法之间的细微差别的问题,但最重要的是它们会很懒惰。


查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信