【问题标题】:Project uses Log4j2 but dependency uses Log4j项目使用 Log4j2 但依赖项使用 Log4j
【发布时间】:2018-06-25 12:32:14
【问题描述】:

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

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

当我们的项目运行时,它使用 Log4j2 记录得很好,但是当我们调用旧库时,它会进行 Log4j 调用,从而引发异常。

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


更新

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

  • log4j-1.2.6.jar

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

  • org.springframework.boot:spring-boot-starter-log4j2

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

  • spring-boot-starter-log4j2--1.5.9.RELEASE.jar
  • log4j-slf4-impl-2.7.jar
  • log4j-api-2.7.jar
  • log4j-core-2.7.jar

【问题讨论】:

    标签: spring-boot log4j log4j2


    【解决方案1】:

    您是否尝试过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 的途径。

    【讨论】:

    • 感谢您的信息。我今天要试一试。我还用我认为相关的更多细节更新了我的问题。
    • 我更新了我对问题中附加信息的回答。
    • 感谢您的更新。我正在与管理该 JAR 的团队合作对其进行 Maven 化。与其他团队合作只是一个缓慢的过程:(
    • 我退出了这个项目,但我又回来了,添加了您推荐的库,并从旧 JAR 中提取了原始 log4j JAR 文件。
    • 很高兴我的回答很有用!
    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多