Log4j 1.2 桥接

Log4j 1.2 桥接允许使用 Log4j 1.2 API 编写的应用程序使用 Log4j 2 代替。

需求

Log4j 1.2 桥接依赖于 Log4j 2 API。当包含 Log4j 2 Core 模块时,以下 Log4j 1.x 方法的行为将与不包含该模块时不同。

方法 无 log4j-core 有 log4j-core
Category.getParent() 返回 null 返回父记录器
Category.setLevel() NoOp 设置记录器级别
Category.setPriority() NoOp 设置记录器级别
Category.getAdditivity() 返回 false 返回记录器的累加设置
Category.setAdditivity() NoOp 设置 LoggerConfig 的累加性
Category.getResourceBundle() NoOp 返回与记录器关联的资源包
BasicConfigurator.configure() NoOp 重新配置 Log4j 2

如果不存在 log4j-core,则使用 Log4j 1.2 API 的调用中的位置信息将不准确。尝试将 Log4j 1.x 配置转换为 Log4j 2 的 config 包在没有 Log4j 2 的情况下不受支持。

有关更多信息,请参阅 运行时依赖项

用法

要使用 Log4j Legacy Bridge,您必须首先识别并从应用程序中删除所有 Log4j 1.x JAR,并用桥接 JAR 替换它们。一旦到位,所有使用 Log4j 1.x 的日志记录都将被路由到 Log4j 2。

如果您使用的是 Maven,可以通过在终端中运行以下命令轻松识别项目中的任何 Log4j 1.x 依赖项。

mvn dependency:tree | grep 'log4j:log4j:'

此命令将为您的项目生成一个依赖项树,并过滤结果以仅显示 Log4j 1.x 依赖项。如果您发现任何依赖项,则需要更新您的 pom.xml 文件以删除 Log4j1 或将其排除在其他情况下。

虽然我们过去已经改进了桥接的兼容性,但尝试通过添加附加器、过滤器等来修改旧版 Log4j 的应用程序可能会遇到问题。在这种情况下,建议首先将这些组件迁移到 Log4j 2。