混合 log4j 1.x 和 log4j 2

Posted

技术标签:

【中文标题】混合 log4j 1.x 和 log4j 2【英文标题】:Mixing log4j 1.x and log4j 2 【发布时间】:2014-11-18 06:04:28 【问题描述】:

我有一个使用 log4j2 编写的新应用程序,以利用它的一些新功能。它使用的一个库有点老,是用 log4j 1.x 构建的。我有一个问题,应用程序中的新代码写入日志,但旧库中的代码没有写入日志。我什至有一个类,它是旧库中某些东西的子类,也被旧库中的代码调用,并且该代码也不会写入日志。我已将应用程序配置为使用 log4j2 版本 2.0.2,并且在将旧库作为 maven 依赖项引用时明确排除了 log4j。

如何让旧库中的代码登录到与新代码相同的文件中?

重写旧库应该被视为最后的选择

【问题讨论】:

【参考方案1】:

您知道 log4j2 包含 log4j-1.2 的桥接器吗?您可以通过删除旧的 log4j-1.2.17.jar 来使用它,并包含这三个 jar:

log4j-api-2.x.jar log4j-core-2.x.jar log4j-1.2-api-2.x.jar

这将导致您的应用程序对 log4-1.2 API 进行的所有调用都被路由到 log4j2 实现。常见问题解答中有一个diagram 可以澄清一些事情。 (不要忘记从类路径中删除旧的 log4j-1.2 jar!)

【讨论】:

看来我也错过了log4j-jcl,但我现在可以进行日志记录了,谢谢! 自定义 Log4j2 附加程序:是的。自定义 log4j 1.2 附加程序:没有。这是一个 API 适配器,实现已更改。您需要将自定义扩展移植到 Log4j2。 这会影响配置文件吗,这意味着我需要将我的log4j1文件迁移到log4j2语法的语法? 是的,log4j 2 不理解 log4j1.x 配置文件。 我们在哪里将此系统属性“log4j1.compatibility”设置为文档中提到的“true”值 - logging.apache.org/log4j/2.13.0/manual/compatibility.html

以上是关于混合 log4j 1.x 和 log4j 2的主要内容,如果未能解决你的问题,请参考以下文章

slf4j 怎么调用 log4j

log4j和slf4j的使用

slf4j与log4j是什麽关系?

slf4j-api,slf4j-log4j12以及log4j之间啥关系

细说log4j之概述

Log4j2异步日志同步日志和混合日志的配置详解