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

Spring集成SLF4J Logger启动报错:缺少org.slf4j.Logger类型Bean

Spring集成SLF4J启动失败问题排查

问题复现

项目中使用SLF4J输出日志,相关代码片段如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Logger logger = LoggerFactory.getLogger(MyService.class);
logger.info("");

应用启动时直接抛出异常,进程以退出码1终止,控制台核心报错信息:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-06-13 14:38:42.998 ERROR 12884 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   :

---
APPLICATION FAILED TO START
---

报错详情:

com.myapp.app.service.MyService类构造器的第2个参数需要类型为org.slf4j.Logger的Bean,但Spring容器中无法找到该Bean。
修复建议:请考虑在你的配置中定义org.slf4j.Logger类型的Bean。

根因

SLF4J的Logger实例不需要交给Spring容器管理,也不应该通过构造器注入、@Autowired注解注入的方式获取。出现这个报错是因为你将Logger放在了MyService的构造器参数列表中,Spring启动时尝试从容器找对应类型的Bean完成注入,但容器内不存在该类型的Bean,直接触发启动失败。
注意:Spring给出的“定义Logger类型Bean”的默认修复建议不适用于该场景,不需要手动注册Logger类型的Bean。

修复方法

  • 移除构造器参数里的Logger类型声明,不要给Logger成员变量加任何Spring注入注解
  • 直接在类内部通过LoggerFactory.getLogger()方法静态初始化Logger实例作为类成员使用,正确写法参考:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class MyService {
    // 直接初始化日志实例,不需要Spring注入
    private static final Logger logger = LoggerFactory.getLogger(MyService.class);

    public void bizMethod() {
        logger.info("业务日志正常输出");
    }
}
  • 如果不想每个类都手动写Logger初始化代码,可以引入Lombok依赖,在类上添加@Slf4j注解,编译期会自动生成上述日志实例代码,不会触发Spring注入报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:12:24