Logback 启动错误修复说明

本文已收录在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 注意

  1. 不要混用日志框架

    • Spring Boot 项目默认使用 SLF4J + Logback
    • 如实在用其他日志框架,需排除 logback 依赖
  2. 日志桥接

    • 若第三方库用log4j,可用 log4j-over-slf4j 桥接到 SLF4J
    • 但不要同时引入 log4j 的实现
  3. 配置文件优先级

    • logback: logback-spring.xml > logback.xml
    • log4j: log4j.xml > log4j.properties

5 优化

  1. 检查是否有其他模块引入了 log4j
  2. 在父 pom.xml 中排除 log4j 依赖
  3. 统一使用 logback 配置

参考:

相关推荐
南朝雨8 天前
Spring Boot Admin日志监控坑点:远程配置的logging.file.name为何生效又失效?
java·spring boot·spring cloud·微服务·logback
麦兜*17 天前
Spring Boot 日志配置 + Logback vs Log4j2 性能对比 + 选型建议
spring boot·log4j·logback
M***Z21018 天前
springboot中配置logback-spring.xml
spring boot·spring·logback
sunnyday042620 天前
深入理解Java日志框架:Logback与Log4j2配置对比分析
java·log4j·logback
煎饼皮皮侠1 个月前
快速查找应用日志的几个场景
unzip·logback·grep
垚森1 个月前
【问题解决】关于log4j与logback依赖冲突的解决方案
log4j·logback·问题解决·依赖冲突
wL魔法师1 个月前
【日志】Logback 配置问题(no applicable action for [springProfile])
logback
ldj20201 个月前
springboot logback 设置日志级别
java·spring boot·logback
云叶知秋1 个月前
Logback 使用全指南
logback