log4j-slf4j-impl cannot be present with log4j-to-slf4j

本文介绍了在修复logback远程执行漏洞时遇到的log4j-slf4j-impl与log4j-to-slf4j冲突问题。这两个包由于都是与SLF4J接口交互,因此不能同时存在。解决方案包括逐一排查项目依赖或全局排除相关包。提供了pom.xml中排除log4j相关依赖并引入logback的示例,以确保修复漏洞并保持日志框架的正常工作。
摘要由CSDN通过智能技术生成

背景:

在修复logback远程执行漏洞时报错

log4j-slf4j-impl cannot be present with log4j-to-slf4j

这个错误的意思是 log4j-slf4j-impl 和 log4j-to-slf4j 这两个包不能同时存在。

那么为什么这两个包不能同时存在呢?我们先来看一下这两个包的定义:

log4j-slf4j-impl
Apache Log4j SLF4J Binding: The Apache Log4j SLF4J API binding to Log4j 2 Core
log4j-to-slf4j
Apache Log4j to SLF4J Adapter: The Apache Log4j binding between Log4j 2 API and SLF4J
从上述定义可以看出,log4j-slf4j-impl 主要是 log4j 对 slf4j 接口的实现,而 log4j-to-slf4j 则是 slf4j 对 log4j 接口的适配。

解决方案

1. 最复杂的方案是:逐个组件,挨个排查

如果springboot 项目使用log4j2日志框架,就将项目中引入 spring-boot-starter-logging及其引用jar 的地方,全部排查掉;或者继续使用springboot的logback,

那么就将log4j2 以及其jar的地方,通排查。— 耗时并且可能排查不干净

2. 使用pom全局排除

即将spring-boot-starter-logging 全部排除或者是将 spring-boot-starter-log4j2 的地方全部排除。

使用springboot 默认的logback 日志输出日志设置 :

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-jul</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>jul-to-slf4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- 修复logback远程执行漏洞-->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.2.9</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.9</version>
      <scope>compile</scope>
    </dependency>

参考:
log4j-slf4j-impl cannot be present with log4j-to-slf4j

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值