首页 文章

Project使用Log4j2但依赖项使用Log4j

提问于
浏览
1

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

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

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

Is there a way to, in our new application which uses log4j2, handle the old log4j calls?


更新

我们的遗留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

1 回答

  • 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应该是类路径中的 removed 才能生效 .


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

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

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

相关问题