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 配置

参考:

相关推荐
.柒宇.4 天前
ELK日志分析系统实战指南:Elasticsearch搭建与入门(8.18.8版本)
运维·elk·elasticsearch·logback·日志系统
hdsoft_huge5 天前
SpringBoot系列17:日志体系Logback配置,日志分割、脱敏、异常堆栈收集规范(生产级落地)
java·spring boot·logback
倒流时光三十年6 天前
Logback 系列(13):生产环境配置建议清单
logback
倒流时光三十年6 天前
Logback 系列(12):高级篇 · MDC 链路追踪
logback
倒流时光三十年7 天前
Logback 系列(3):三大核心组件 Logger / Appender / Encoder
java·开发语言·logback
倒流时光三十年7 天前
Logback 系列(7):常用 Appender(控制台 / 文件 / 滚动文件)
java·前端·logback
倒流时光三十年7 天前
Logback 系列(6):Pattern 布局语法速查
logback
我是唐青枫10 天前
Java SLF4J 实战指南:从日志门面到 Logback、MDC 和链路追踪
java·开发语言·logback
豆瓣鸡19 天前
整合Logback日志框架
logback
逆光的July2 个月前
Logback 学习笔记
笔记·学习·logback