Background
- 我项目中使用的是 log4j2 + slf4j如下图一所示,在idea本地运行时没有报错;
- 当我使用 maven-shade-plugin 打包项目到 jar 文件,并将 jar 作为独立应用程序运行时,它显示错误;
- 具体报错信息如下图二所示:
解决方案
- 如果依赖项包含 log4j2 插件,则 jar 中会包含一个 Log4j2Plugins.dat 缓存文件。
- 当使用 Maven shade 插件将多个 jar 与 Log4j2Plugins.dat 文件合并时,只有一个会存在。
- 如果没有插件定义,启动时会显示错误。
- Log4j2 issue对此的一种解决方案是从阴影 jar 中排除 Log4j2Plugins.dat 缓存文件,以便 Log4j 在启动时扫描插件。
- 为此,在 pom 文件中的 maven-shade-plugin 配置中添加一个过滤器就可以了,如下所示。
<excludes>
<exclude>**/Log4j2Plugins.dat</exclude>
</excludes>