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(推荐)
这是最省心的方式,不需要额外引入依赖,只需要修改代码中的日志相关代码:
- 替换原有的import语句:
// 替换掉原来的 import org.apache.log4j.Logger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - 修改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默认的日志依赖避免冲突:
- 修改
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' } - 添加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
相关产品推荐
相关产品推荐

