Spring boot 项目使用Log4j2,但依赖项使用Log4j

Spring boot 项目使用Log4j2,但依赖项使用Log4j,spring-boot,log4j,log4j2,Spring Boot,Log4j,Log4j2,我们有一个新项目,我们正在使用springboot编写,其中我们使用Log4j2进行日志记录 问题是我们需要使用一个遗留库,我们拥有它,但我们不能改变它;其他几个系统也使用它,我们不能通过改变它们来扩大我们的范围 当我们的项目运行时,它使用Log4j2记录的很好,但是当我们调用遗留库时,它会发出Log4j调用,引发异常 在使用log4j2的新应用程序中,有没有办法处理旧的log4j调用? 更新 我们的遗留JAR在内部lib文件夹中包含几个JAR,包括: log4j-1.2.6.jar 我们

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

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

当我们的项目运行时,它使用Log4j2记录的很好,但是当我们调用遗留库时,它会发出Log4j调用,引发异常

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


更新 我们的遗留JAR在内部lib文件夹中包含几个JAR,包括:

  • log4j-1.2.6.jar
我们的项目是一个Spring Boot项目,我们包含了依赖项:

  • org.springframework.boot:spring-boot-starter-log4j2
我在projects类路径上看到的log4j jar是:

  • 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

您是否试用了
log4j-1.2-api
适配器?将其与
log4j api
log4j核心
依赖项一起使用。适配器允许应用程序使用log4j1.2api,但会将这些调用路由到log4j2实现。请参见常见问题解答中的问题

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

请注意,传统的log4j-1.2.xjar应该从类路径中删除,这样才能工作


更新:如果遗留jar包含log4j1.2.xjar,这会导致将log4j1.2.xjar添加到类路径中,那么结果是未定义的

我相信您别无选择,只能在不使用log4j1.2.xjar的情况下创建这个遗留jar的自定义版本。您组织中的其他系统可以继续使用原始遗留jar和嵌入的log4j1.2.xjar,直到它们也想迁移到Log4j2为止


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

谢谢你的信息。我今天要试一试。我还更新了我的问题,更新了我认为相关的更多细节。我更新了我的答案,获得了问题中的更多信息。谢谢你的更新。我正在与管理JAR的团队合作,以使其专业化。与其他团队合作只是一个缓慢的过程:(我完成了这个项目,但我又回来了,添加了您推荐的库,并从遗留JAR中提取了原始log4j JAR文件。很高兴我的回答有用!