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

Spring Boot从1.5.9升级至2.0.1后Logger找不到符号问题求助

解决Spring Boot 2.0.1升级后log4j Logger找不到的问题

问题原因

Spring Boot 2.x版本开始,默认的日志实现从log4j切换成了logback(基于SLF4J抽象层),而且不再自动包含org.apache.log4j相关的依赖包。你之前的代码依赖的是log4j 1.x的API,升级后因为依赖缺失,所以执行gradle build时会报cannot find symbol Logger的错误。

解决方案

有两种处理方式,推荐优先选择第一种(符合Spring Boot的生态设计):

方案一:切换到Spring Boot默认的SLF4J+Logback(推荐)

这是最省心的方式,不需要额外引入依赖,只需要修改代码中的日志相关代码:

  1. 替换原有的import语句:
    // 替换掉原来的 import org.apache.log4j.Logger;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
  2. 修改Logger的初始化代码:
    // 替换原来的 Logger logger = Logger.getLogger(this.getClass().getName());
    Logger logger = LoggerFactory.getLogger(this.getClass());
    

这种方式完全适配Spring Boot 2.x的默认配置,后续也不会有依赖冲突的问题。

方案二:继续使用log4j 1.x(不推荐,仅适用于必须保留原有代码的场景)

如果你因为历史原因必须保留原有的log4j代码,需要手动在build.gradle中添加log4j的依赖,并排除Spring Boot默认的日志依赖避免冲突:

  1. 修改dependencies块中的spring-boot-starter依赖,排除默认的logback和slf4j桥接:
    compile('org.springframework.boot:spring-boot-starter') {
        exclude group: 'ch.qos.logback', module: 'logback-classic'
        exclude group: 'org.slf4j', module: 'slf4j-log4j12'
    }
    
  2. 添加log4j 1.x的依赖:
    compile 'org.apache.log4j:log4j:1.2.17'
    

执行gradle build后,原有的log4j代码就能正常编译了。不过要注意,log4j 1.x已经停止维护很久了,存在安全隐患,长远来看还是建议迁移到SLF4J+Logback或者log4j 2.x。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:37:20