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

Log4J2动态Appender结合maven-shade-plugin失效问题排查

Log4j2 编程式添加Appender在maven-shade-plugin引入后失效问题排查

我通过编程方式添加了一个Appender,引入maven-shade-plugin前运行正常,添加后出现失效情况,现需排查原因。

以下为不同场景下Appender的工作状态:

  • ✅ 在IDE(IntelliJ IDEA)中运行正常
  • ❌ 使用shade(Uber/fat)jar时失效 <-- 现已修复 ✅ 见答案
  • ✅ 使用独立jar包(应用jar、log4j jars)时正常
  • ❌ 使用应用jar+解压后的log4j文件目录时失效
  • ✅ 使用应用jar+重新压缩的log4j文件包时正常

示例项目

  • 项目地址:GitHub仓库log4j2-thread-context
  • 添加自定义Appender的代码位置:ThreadContextFileLogHandler.java第79行
  • Appender失效时,无法在以下位置接收事件:ThreadContextFileLogHandler.java第156行

复现上述场景的步骤

mvn clean compile
mkdir -p local/log4j-jars
unzip $HOME/.m2/repository/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar -d local/log4j-jars
unzip -o $HOME/.m2/repository/org/apache/logging/log4j/log4j-core/2.17.2/log4j-core-2.17.2.jar -d local/log4j-jars
cd local/log4j-jars
zip -r ../log4j-jars.zip .
cd ../..

# 场景2 ❌ 使用fat jar
java -cp "target/log4j-test-1.0-SNAPSHOT.jar" org.example.Main

# 场景3 ✅ 使用独立jar包
java -cp "target/original-log4j-test-1.0-SNAPSHOT.jar:$HOME/.m2/repository/org/apache/logging/log4j/log4j-core/2.17.2/log4j-core-2.17.2.jar:$HOME/.m2/repository/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar" org.example.Main

# 场景4 ❌ 使用解压后的log4j文件
java -cp "target/original-log4j-test-1.0-SNAPSHOT.jar:local/log4j-jars" org.example.Main

# 场景5 ✅ 使用重新压缩的log4j文件
java -cp "target/original-log4j-test-1.0-SNAPSHOT.jar:local/log4j-jars.zip" org.example.Main

补充说明

在场景5中,我发现可以删除META-INF中的部分文件,但需保留以下内容才能让Appender正常工作:

  • META-INF
    • org(包含Log4j2Plugins.dat)
    • services(缺少该目录应用会崩溃)
    • versions
    • MANIFES.MF

相关问题

  • Log4j2的JsonTemplateLayout在maven-shade-plugin下无法工作:该问题似乎与Log4j2Plugins.dat有关,但我的项目中该文件仅存在于log4j2-core中。
  • 使用jar包运行Java程序和使用解压后的文件运行有区别吗?:根据我的问题,两者确实存在差异(可能META-INF目录的处理方式与jar包不同)

内容的提问来源于stack exchange,提问作者Ferran Maylinch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:52:42