Java 对SLF4J API的Lambda支持

Java 对SLF4J API的Lambda支持,java,logback,slf4j,Java,Logback,Slf4j,在Log4j最新的API中,我们有Lambda支持,在这里我可以轻松地管理调试选项 例如: logger.debug("This {} and {} with {} ", () -> this, () -> that, () -> compute()); 但是对于slf4j/logback,有任何选项可以如上所述启用lambda。那么请告诉我语法。也许类似的东西可以用。您需要确定创建新的”实例的成本是否比用其他方法更好 logger.debug(“这个{}和带有{}的{

在Log4j最新的API中,我们有Lambda支持,在这里我可以轻松地管理调试选项

例如:

logger.debug("This {} and {} with {} ", 
  () -> this, () -> that, () -> compute());

但是对于slf4j/logback,有任何选项可以如上所述启用lambda。那么请告诉我语法。

也许类似的东西可以用。您需要确定
创建新的
”实例的成本是否比用其他方法更好

logger.debug(“这个{}和带有{}的{}”,
推迟(()->这个),
推迟(()->那个),
延迟(()->计算());
然后用这个

import lombok.NonNull;
导入lombok.RequiredArgsConstructor;
@RequiredArgsConstructor(staticName=“延迟”)
公共类日志字符串{
@非空私有最终字符串生成器;
@凌驾
公共字符串toString(){
返回generator.createString();
}
公共接口字符串生成器{
字符串createString();
}
}

不幸的是,这还不受支持:

支持:

导入kr.pe.kwnnam.slf4jlambda.LambdaLogger;
进口kr.pe.kwonnam.slf4jlambda.lambdalogger工厂;
LambdaLogger log=LambdaLoggerFactory.getLogger(YourClass.class);
//消息本身的lambda
调试(()->createMessage(“调试级别”);
//消息格式参数的lambda
info(“info lambda格式化程序编号{},字符串{}”,()->123,()->“Hello LambdaLogger”);
//方法参考
公共字符串longRunnigMethod(){
返回“一些长时间运行的方法”;
}
debug(“长运行方法日志记录{}”,this::longRunnigMethod);
//异常日志记录
log.error(()->“error lambda exception msg-”+ex.getMessage(),ex);
SLF4J–第2版 的版本2支持lambda语法

这个新版本也带来了新的挑战。版本2需要Java 8或更高版本

截至2020-06年,版本2仍处于实验/不稳定阶段,最新的alpha版本是2019-10年

Maven POM设置:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.0-alpha1</version>
</dependency>

org.slf4j

第页。

@请留下评论,说明你为什么不喜欢这个答案。是因为您不想添加另一个库,还是因为此库目前仅在GitHub上有7个星星?因为我们不想在logging libs zoo中有更多依赖项。在slf4j()中有一个支持lambdas的请求,而log4j中已经有这样的特性。请在slf4j中提出拉取请求,而不是创建另一个库。@Mr.Cat请联系库的作者和/或获取代码并将其集成到slf4j中。再次检查自2016年以来一直存在的许可证。这里有老的讨论。如果没有设置调试级别,这实际上会推迟执行吗?我相信JVM实际上会调用defer()方法,该方法将调用lambda。也许你可以在那里放一根树枝来检查日志级别别相信我的话。尝试并测试它。:)@将调用JonathanS.Fisher
defer
,并返回一个LogString对象。不会调用lambda(它是lambda,不是表达式!)。只有在设置了调试级别并且slf4j调用LogString::toString时,lambda才会执行。slf4j已经在其最新版本中实现了它。slf4j-api-2.0.0-alpha0将附带2.0.0-alpha1I我正在尝试2.0.0-alpah1,并且这些方法仍然不采用lambdas。不知道会有什么结果。我想知道我们还要等多久,直到v2上市。使用2.0.0-alpha1,似乎不是这样不幸的是,它仍然在alpha中