本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
- 🚀 魔都架构师 | 全网30W技术追随者
- 🔧 大厂分布式系统/数据中台实战专家
- 🏆 主导交易系统百万级流量调优 & 车联网平台架构
- 🧠 AIGC应用开发先行者 | 区块链落地实践者
- 🌍 以技术驱动创新,我们的征途是改变世界!
- 👉 实战干货:编程严选网
0 现象
启动时出现以下错误:
bash
log4j:ERROR Could not find value for key log4j.appender.DEBUG
log4j:ERROR Could not instantiate appender named "DEBUG".
1 原因
项目存在日志框架冲突:
1.1 同时引入两个日志框架
在 pom.xml 中同时引入了:
- log4j 1.x - 旧版日志框架
- logback - Spring Boot 默认日志框架(通过 spring-boot-starter-logging)
2. log4j 配置错误
log4j.properties文件:
properties
## set log levels ###
log4j.rootLogger = INFO,console
LocationInfo=true
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.appender.infoFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoFile.Threshold = INFO
#log4j.appender.infoFile.File = D:/logs/log
log4j.appender.infoFile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.infoFile.Append=true
log4j.appender.infoFile.layout = org.apache.log4j.PatternLayout
log4j.appender.infoFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
#
log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorFile.Threshold = ERROR
#log4j.appender.errorFile.File = D:/logs/error
log4j.appender.errorFile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.errorFile.Append=true
log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugfile.Threshold = DEBUG
#log4j.appender.debugfile.File = D:/logs/debug
log4j.appender.debugfile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.debugfile.Append=true
log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout
log4j.appender.debugfile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
注意第2行的 DEBUG 是引用名为 "DEBUG" 的 appender,但配置文件中实际定义的是 debugfile(第27行),导致找不到 appender。
3. 项目实际使用 logback
项目已配置 logback-spring.xml,且代码中用的:
java
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SomeClass {
log.info("..."); // 这会用 logback
}
2 解决方案
方案1:移除 log4j(推荐)
因为 Spring Boot 项目推荐使用 logback,移除 log4j:
1. 注释 pom.xml 中的 log4j 依赖
gateway-server/pom.xml:
xml
<!-- log4j - 已禁用,项目使用logback -->
<!--
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
-->
gateway-common/pom.xml:
xml
<!-- log4j - 已禁用,项目使用logback -->
<!--
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
-->
2. 删除 log4j.properties
3. 重新构建项目
bash
mvn clean install
方案2:修正 log4j 配置(不推荐)
确实要用 log4j,修正配置:
log4j.properties
properties
# 修正前
log4j.rootLogger = INFO,DEBUG
# 修正后(引用正确的 appender 名称)
log4j.rootLogger = INFO,console,debugfile
或:
properties
# 将 debugfile 改名为 DEBUG
log4j.appender.DEBUG = org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.Threshold = DEBUG
...
3 验证修复
启动应用后,不应再看到 log4j 错误信息,日志应该正常输出到:
- 控制台(STDOUT)
- 日志文件(logs/l4-gateway.log)
日志格式应为(包含链路追踪信息):
[2026-01-06 10:30:51:042] [1767631698290-a1b2c3d4][CMD:HEARTBEAT] [OEM:20009] reactor-http-nio-4 INFO c.i.g.s.n.Handler 48 - 收到TCP数据包
4 注意
-
不要混用日志框架
- Spring Boot 项目默认使用 SLF4J + Logback
- 如实在用其他日志框架,需排除 logback 依赖
-
日志桥接
- 若第三方库用log4j,可用
log4j-over-slf4j桥接到 SLF4J - 但不要同时引入 log4j 的实现
- 若第三方库用log4j,可用
-
配置文件优先级
- logback:
logback-spring.xml>logback.xml - log4j:
log4j.xml>log4j.properties
- logback:
5 优化
- 检查是否有其他模块引入了 log4j
- 在父 pom.xml 中排除 log4j 依赖
- 统一使用 logback 配置
参考: