log4j2(v2.19.0)下MyCommonObjects.jar内部日志无法输出的问题咨询
解决Log4j2下MyCommonObjects.jar日志无法输出的问题
针对你遇到的Log4j2迁移后通用Jar包日志无法输出的问题,以下是几个关键排查和解决方向:
1. 适配Log4j1到Log4j2的API兼容
如果MyCommonObjects.jar中仍使用Log4j 1.x的API(如org.apache.log4j.Logger),直接迁移到Log4j2会导致日志路由失效。需要引入Log4j2提供的桥接包,将旧API调用转发到Log4j2实现:
- Maven依赖添加(版本与你的Log4j2核心保持一致2.19.0):
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <version>2.19.0</version> </dependency> - 确保移除原Log4j1的依赖包,避免冲突。
2. 配置Jar包对应包的日志级别与输出目标
Web服务模块的Log4j2配置默认可能未覆盖Jar包内类的日志规则,需显式配置对应包的Logger:
- 在WebService的
log4j2.xml中添加针对MyCommonObjects包的Logger配置:<!-- 替换为Jar包实际的根包路径 --> <Logger name="com.yourcompany.mycommonobjects" level="info" additivity="true"> <!-- 关联到Web服务已配置的文件Appender --> <AppenderRef ref="WebServiceFileAppender"/> </Logger>additivity="true"表示继承Root Logger的配置,若已在Root中指定Appender,可省略<AppenderRef>;若需单独输出,可设置为false并指定专属Appender。
- 检查Root Logger的级别,确保不低于Jar包Logger的级别(比如Root设为
warn,而Jar包Logger设为info,则info级日志不会输出)。
3. 排查类加载与依赖冲突问题
- 确保Web服务模块与MyCommonObjects.jar依赖的Log4j2组件版本完全一致(
log4j-api、log4j-core),避免因类加载器隔离导致配置无法共享。 - 若使用Web容器(如Tomcat),检查容器是否全局部署了Log4j2相关包,可能会覆盖模块本地的配置,需调整容器类加载策略或移除全局包。
4. 验证Log4j2配置加载状态
添加启动参数-Dlog4j2.debug=true启动Web服务,查看控制台输出的Log4j2调试日志:
- 确认Web服务的配置文件是否被正确加载(如
Found configuration file [...])。 - 检查Jar包内类对应的Logger是否被正确识别(如
LoggerConfig[name=com.yourcompany.mycommonobjects, level=info])。
5. 移除Jar包内的Log4j2配置文件
如果MyCommonObjects.jar中自带log4j2.xml或log4j2.properties,会优先加载该配置,导致日志输出不符合Web服务预期。需删除Jar包内的Log4j2配置文件,让Web服务模块的配置生效。
内容的提问来源于stack exchange,提问作者Raktim
相关产品推荐
相关产品推荐

