【问题标题】:Sfl4j and java 8: The target type of this expression must be a functional interfacesfl4j和java 8:这个表达式的目标类型必须是函数式接口
【发布时间】:2020-04-29 22:20:27
【问题描述】:

我有一个非常昂贵的操作来生成调试消息,我想避免每次都生成它。

所以我用这个:

log.debug("{}", () -> expensive()); //gives the target type must be a functional interface

我定义了:

private String expensive(){
    StringBuilder sb = new StringBuilder();
    aLongList.forEach( (element) -> sb.append(element));
    return sb.toString();
}

我做错了什么?

【问题讨论】:

    标签: java java-8 slf4j


    【解决方案1】:

    我认为 SLF4J 不支持惰性消息 parameter 构造,仅支持惰性 message 构造(使用消息格式)。

    但是你可以使用这样的东西:

    if (log.isDebugEnabled()){
      log.debug(expensive());
    }
    

    【讨论】:

    • 它违反了声纳规则,这就是我寻找替代品的原因:(
    • 最后我切换到 log4j2,它提供了我正在寻找的接口!。感谢您发出信号表明这是 slf4j 故障
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多