当前位置: 首页 > news >正文

springboot换日志框架后爆SLF4J: Class path contains multiple SLF4J bindings的解决办法

sringboot原本使用的是logback日志框架,将它去掉,修改为log4j2日志框架后,往往会出现以下错误:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.11.2/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

出现这种错误时,项目还能继续运行 ,但是我们会发现log4j.xml的配置并不生效,日志也没有输出到文件里面。并且打包成war包部署到tomcat上也会出现错误,这是由于jar包冲突导致的。

由于多个jar包实现了SLF4J bindings接口,类加载时就出现了歧义。我们只要在pom.xml文件了去除掉引起冲突的引入即可。

最常见的引入冲突是由springboot本身的日志框架引起的。我们可以在pom.xml的

spring-boot-starter和spring-boot-starter-web依赖做出以下修改:
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>

这时候再运行项目,log4j.xml配置就生效了。如果还是报错冲突,那就说明项目还有其他依赖也引入了日志框架,这时我们就需要一步步排查了。

下面是排查步骤:

一、打开pom.xml,在pom文件里点击右键,做出以下选择:

选择之后,会出现类似的一个依赖图:

 

 二、按ctrl+f,出现以下列表,是所有的包

我们前面的冲突是:

SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.11.2/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

所以我们可以查找点击这两个包,看看是哪里引入了这两个包。以springboot-starter-logging为例,这里同时出现了两个包:

双击springboot-starter-logging可以进去查看它的maven文件。

由于springboot-starter-logging的maven配置是springboot自动配置的,不是我们项目的。所以我们看依赖springboot-starter-logging的包springboot starter,双击点进去,就是我们项目的pom文件了。用exclusion去掉springboot-start-logging。groupip和artifactid就是我们刚刚看到的groupid和artifactid了。

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>

其他依赖冲突也是这样解决。如果你exclsuion去掉相关包之后,启动项目报错,说明不是这里冲突,改回来继续修改下一处即可。 

http://www.lryc.cn/news/316695.html

相关文章:

  • k8s+zabbix
  • k8s-生产级的k8s高可用(2) 25
  • ubuntu20.04 创建ros环境、创建rospackage
  • QT进阶---------pro项目文件中的常用命令 (第三天)
  • php常用设计模式应用场景及示例
  • 浏览器与服务器通信过程(HTTP协议)
  • Pytorch搭建AlexNet 预测实现
  • 笔记:使用parfile进行的数据导入导出
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的行人跌倒检测系统(深度学习+UI界面+完整训练数据集)
  • Ubuntu 14.04:PaddleOCR基于PaddleServing的在线服务化部署(失败)
  • Java JUC 笔记(2)
  • webpack5高级--02_提升打包构建速度
  • MAC M芯片 Anaconda安装
  • 【JS】自动下拉网页刷新,当出现指定关键字,就打印出来
  • 中兴通讯联手新疆移动,开通全疆首个乡农场景700M+900M双频双模基站
  • 爬虫案例4: parsel 模块的运用
  • 数据结构·复杂度
  • 数学建模理论与实践国防科大版
  • Yakit爆破模块应用
  • 【3GPP】【核心网】【5G】NAS连接管理和UE注册管理状态(超详细)
  • 细粒度IP定位参文2(Corr-SLG):A street-level IP geolocation method (2021年)
  • Mac上使用M1或M2芯片的设备安装Node.js时遇到一些问题,比如卡顿或性能问题
  • 学习vue3第四节(ref以及ref相关api)
  • 关于电脑无法开启5G频段热点的解决方案
  • 清理磁盘空间 - Win系统
  • 科技革新的引擎-2024年AI辅助研发趋势
  • 【PTA】L1-021 L1-022 L1-023 L1-024 L1-025(C)第四天
  • Stable Diffusion 如何写好提示词(Prompt)
  • 树莓派Py程序加入开机自启
  • Java EasyExcel注解详解和实战案例