【log4j2日志框架】maven-shade-plugin方式打包后不打印日志

it2025-02-01  28

0、背景

当我直接将log4j2相关的jar包用maven-shade-plugin方式达到另一个jar中,方便集成的时候发现,报出了无法识别log4j2各个插件的错误。

1、解决办法

参考https://www.cnblogs.com/cekaigongchengshi/articles/12789854.html 方案一,排除掉Log4j2Plugins.dat。

但是发现找不到自定义的滚动策略CustomRolloverStrategy,将CustomRolloverStrategy修改为默认的DefaultRolloverStrategy后更奇怪,虽然不在报错,但是依然不打印日志。 研究了一下刚才的方案一,是为解决多个Log4j2Plugins.dat冲突的。Log4j2Plugins.dat中定义的是log4j2的一些插件配置,log4j-core定义了一个,自定义的CustomRolloverStrategy相关jar包中又定义了一个。下图是log4j-core单独打包后的Log4j2Plugins.dat。

将log4j-core通过shade方式打包到其他jar包,会发现Log4j2Plugins.dat中只剩下了CustomRolloverStrategy的定义:

因此排除掉Log4j2Plugins.dat这个文件,就彻底找不到log4j2的各个插件了。解决办法还是要想办法将自定义的插件和log4j-core中定义的插件一起打进Log4j2Plugins.dat中。 重新对shade插件进行配置

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.3</version> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="com.github.edwgiz.maven_shade_plugin.log4j2_cache_transformer.PluginsCacheFileTransformer" /> </transformers> <artifactSet> <includes> <include>*:*</include> </includes> </artifactSet> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>com.github.edwgiz</groupId> <artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId> <version>2.13.2</version> </dependency> </dependencies> </plugin> </goals> </execution> </executions> </plugin>

其中有个小坑,maven-shade-plugin.log4j2-cachefile-transformer不同版本之间有差异,因此要注意使用的log4j2版本和maven-shade-plugin版本的匹配关系。不匹配会报出如下的错误: 我这里使用的log4j2为2.13.2版本,因此引入的maven-shade-plugin.log4j2-cachefile-transformer也是2.13.2,对于的maven-shade-plugin版本为3.2.3,这个对应关系在maven-shade-plugin.log4j2-cachefile-transformer包中的META-INF中可以找到。 这样打包后Log4j2Plugins.dat就包含了log4j-core中定义的插件和我们自定义的插件,perfect!

最新回复(0)