使用lambda参数记录kotlin

vac*_*ach 13 java-8 kotlin log4j2

在log4j2中,我们有一个方便的功能,描述为

// Java-8 style optimization: no need to explicitly check the log level:
// the lambda expression is not evaluated if the TRACE level is not enabled
logger.trace("Some long-running operation returned {}", () -> expensiveOperation());
Run Code Online (Sandbox Code Playgroud)

我试图在kotlin中使用它

log.debug("random {}", { UUID.randomUUID() })
Run Code Online (Sandbox Code Playgroud)

这将打印

random Function0<java.util.UUID>
Run Code Online (Sandbox Code Playgroud)

我们如何使用kotlin使用lambda参数记录?或者我们如何明确告诉kotlin要调用哪种方法?

JB *_*zet 12

问题是debug()重载,并有另一种方法将vararg对象作为参数.Kotlin选择那个重载而不是一个Supplier<?>参数作为参数,因为它不知道lambda表达式应该是一个供应商.

只需将其指定为供应商:

log.debug("random {}", Supplier { UUID.randomUUID() })
Run Code Online (Sandbox Code Playgroud)