You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slf4j的log.debug方法在函数Bean内部抛出空指针异常问题咨询

问题根因分析

你遇到的空指针异常不是Slf4j的logger对象为null导致的,问题出在日志内容的拼接环节:

  • ConcurrentLinkedQueue的poll()方法在队列没有元素时会直接返回null
  • 你在日志字符串拼接时直接调用了sysEvt.toString(),当sysEvt为null时就会触发NPE,还没执行到log.debug方法本身就已经抛出异常,所以会出现误以为是log对象异常的假象。
修复方案

两种常用修复方案可二选一:

  • 先判空再打印日志,同时使用Slf4j占位符规避空指针风险:
@Bean
public Supplier<Event> msgSender()
{
    return () -> {
        Event sysEvt = eventq.poll();
        if (sysEvt != null) {
            log.debug(" Msg polled from Cloud Stream and Sent: {}", sysEvt);
        }
        return sysEvt;
    };
}

说明:占位符语法{}不仅能避免手动调用toString()的空指针风险,当日志级别高于debug时还会跳过对象序列化步骤,性能优于字符串拼接写法。

  • 用Java 8+的Optional简化判空逻辑:
@Bean
public Supplier<Event> msgSender()
{
    return () -> {
        Event sysEvt = eventq.poll();
        Optional.ofNullable(sysEvt)
            .ifPresent(evt -> log.debug(" Msg polled from Cloud Stream and Sent: {}", evt));
        return sysEvt;
    };
}

内容的提问来源于stack exchange,提问作者Thiru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 22:12:01