Project使用Log4j2,但依赖项使用Log4j

时间:2018-01-16 18:07:27

标签: spring-boot log4j log4j2

我们有一个新项目,我们正在使用 Spring Boot 编写,我们正在使用 Log4j2 进行日志记录。

问题是我们需要使用我们拥有的遗留库,但我们无法改变;其他几个系统使用它,我们不能通过改变所有系统来扩大我们的范围。

当我们的项目运行时,它使用 Log4j2 进行正常记录,但是当我们调用遗留库时,它会使 Log4j 调用抛出异常。

有没有办法在我们使用log4j2的新应用程序中处理旧的log4j调用?

更新

我们的旧版JAR在内部lib文件夹中包含多个JAR,包括:

  • 的log4j-1.2.6.jar

我们的项目是一个Spring Boot项目,我们已经包含了依赖项:

  • org.springframework.boot:弹簧引导起动log4j2

我在项目类路径中看到的log4j JARS是:

  • 弹簧引导起动log4j2--1.5.9.RELEASE.jar
  • 的log4j-slf4-IMPL-2.7.jar
  • 的log4j-API-2.7.jar
  • log4j的核-2.7.jar

1 个答案:

答案 0 :(得分:3)

您是否尝试过log4j-1.2-api适配器?将此与log4j-apilog4j-core依赖项一起使用。适配器允许应用程序使用Log4j 1.2 API,但将这些调用路由到log4j2实现。请参阅常见问题解答中的which jars问题。

如果应用程序使用内部Log4j 1.2类,这可能不起作用,但对于普通日志记录,它是log4j-1.2.x jar的替代品。

请注意,旧版log4j-1.2.x jar应该从类路径 删除 才能生效。

更新:如果旧版jar 包含 Log4j 1.2.x jar,这会导致Log4j 1.2.x jar被添加到类路径中,结果是未定义的。

我相信你别无选择,只能在没有 Log4j 1.2.x jar的情况下创建这个遗留jar 的自定义版本。组织中的其他系统可以继续使用带有嵌入式Log4j 1.2.x jar的原始传统jar,直到他们还想迁移到Log4j2。

您的新版本的旧版jar(没有嵌入式Log4j 1.2.x jar)可能成为组织中所有其他系统迁移到Log4j2的途径。