Java 8 具有lambda参数的kotlin测井

Java 8 具有lambda参数的kotlin测井,java-8,log4j2,kotlin,Java 8,Log4j2,Kotlin,在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 {}", () -> expensiveO

在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());
我尝试在kotlin中使用这个

log.debug("random {}", { UUID.randomUUID() })
哪个会打印

random Function0<java.util.UUID>
随机函数0

如何在kotlin中使用lambda参数日志记录?或者我们如何明确地告诉kotlin调用哪个方法?

问题是
debug()
重载,并且有另一个方法以vararg对象作为参数。Kotlin选择该重载而不是将
Supplier
作为参数的重载,因为它不知道lambda表达式应该是Supplier

只需将其指定为供应商:

log.debug("random {}", Supplier { UUID.randomUUID() })
退房。它还提供以下功能:

一个使用Kotlin扩展封装slf4j的方便且性能良好的日志库

调用日志方法,而不检查是否启用了相应的日志级别:

logger.debug { "Some $expensive message!" }
在幕后,如果未启用调试,则不会对昂贵的消息进行评估:

if (logger.isDebugEnabled) logger.debug("Some $expensive message!")
定义记录器,而不显式指定类名:

// Place definition above class declaration to make field static  
private val logger = KotlinLogging.logger {}