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

Spring Boot主项目的非Spring依赖项目无法读取自身Log4j配置问题

问题根本原因

  • Log4j的配置上下文是JVM全局唯一的,应用启动时只会加载类路径下优先级最高的一份log4j配置文件,子依赖jar包中的log4j.properties会被主项目的同文件名配置覆盖,根本不会被读取。
  • 你同时引入了Log4j 1.x和Log4j 2.x两套依赖,存在日志实现冲突,项目B的日志输出走的是Log4j默认的兜底配置,才会出现无自定义格式的输出。

解决方案

第一步:统一日志依赖,排除冲突

首先清理所有子项目和主项目的日志依赖,统一用一套日志实现,避免冲突:

  1. 所有子项目(项目B、另一个依赖项目)的pom.xml中,把log4j相关依赖的scope改为provided,避免打包到jar中,依赖由主项目统一提供:
<!-- 子项目pom.xml中log4j依赖调整 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.14.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.0</version>
    <scope>provided</scope>
</dependency>
  1. 主项目pom.xml中添加log4j-1.2-api桥接包,兼容Log4j 1.x的日志调用:
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.14.0</version>
</dependency>

第二步:统一在主项目配置所有模块的日志规则

删除所有子项目resources下的log4j.properties配置,所有日志规则都在主项目的log4j配置中统一配置,直接追加项目B和另一个依赖的日志规则即可:

# 原有主项目配置保持不变
log4j.logger.com.example.MainProject=DEBUG, consoleAppender, FILE
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=[MainProject] - %-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} - %C:%M:%L - %m%n

## File Appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=/opt/app/log/MainProject.log
log4j.appender.FILE.DatePattern='_'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.FILE.layout.ConversionPattern=[MainProject] - %-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} - %C:%M:%L - %m%n
log4j.additivity.com.example.MainProject=false

# 追加项目B的日志规则
log4j.logger.com.example.ProjectB=DEBUG, projectBConsole
log4j.appender.projectBConsole=org.apache.log4j.ConsoleAppender
log4j.appender.projectBConsole.Target=System.out
log4j.appender.projectBConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.projectBConsole.layout.ConversionPattern=[ProjectB] - %-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} - %C:%M:%L - %m%n
log4j.additivity.com.example.ProjectB=false

# 按照相同格式追加另一个依赖项目的日志规则即可

注意:不同模块的appender名称不能重复,比如项目B的appender不要和主项目的consoleAppender重名,避免配置覆盖。

第三步:验证效果

重新打包主项目启动后,不同模块的日志会按照配置的各自格式输出,不会再出现默认格式的日志。

内容的提问来源于stack exchange,提问作者Fernando Caria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:57:03