解决SLF4J: Class path contains multiple SLF4J bindings.

JDK版本:jdk17
IDEA版本:IntelliJ IDEA 2022.1.3
SpringBoot 版本:v2.5.7
maven版本:3.6.3


文章目录

  • 问题描述:
  • 原因分析:
  • 解决方案:
  • 参考资料:


在这里插入图片描述


问题描述:

当SpringBoot项目中引入多个依赖,如果多个依赖中都引入了SLF4J类库,启动项目时就会报以下错误

如下图所示

在这里插入图片描述

完整报错信息如下

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/ins/apache-maven-3.6.3/localReposity/ch/qos/logback/logback-classic/1.2.7/logback-classic-1.2.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/ins/apache-maven-3.6.3/localReposity/org/slf4j/slf4j-simple/1.7.32/slf4j-simple-1.7.32.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

原因分析:

当前项目的依赖中类路径中存在多个绑定的SLF4J类库,产生冲突了

那为什么SpringBoot项目不允许存在多个绑定SLF4J类库的依赖?

Spring Boot项目中不建议存在多个SLF4J绑定类库的依赖。虽然在技术上,一个项目可以包含多个SLF4J绑定(即实现了SLF4J API的具体日志实现库,如Logback、Log4j、SLF4J Simple等),但这样做会导致以下问题:

  1. 冲突与不确定性

    当类路径中存在多个SLF4J绑定时,SLF4J会在启动时警告存在多个绑定,并会选择其中一个绑定进行初始化。这种选择通常是不确定的,取决于类加载器的加载顺序。由于不同的日志实现可能存在差异,使用非预期的日志系统可能会导致日志输出不符合预期,甚至丢失日志信息。

  2. 资源浪费

    多个绑定意味着类路径中加载了多个日志实现库,这不仅增加了应用程序的内存占用,还可能导致CPU资源浪费,因为未被选中的日志库仍会被加载但并未实际使用。

  3. 配置复杂性

    如果项目中同时存在多个日志实现,配置管理会变得复杂。您可能需要为每个日志实现分别配置,而这可能导致配置冲突或难以预期的行为。此外,当需要切换日志实现时,需要更新多个配置文件,增加了维护负担。

  4. 潜在的兼容性问题

    不同的日志实现可能存在细微的API差异或行为差异。同时使用多个绑定可能导致某些特性无法正常工作,或者在特定场景下产生难以诊断的问题。

所以,为了避免上述问题,Spring Boot项目通常遵循以下原则:

  • 明确指定一个日志实现:在项目中只保留一个SLF4J绑定,通常是Logback,因为它与Spring Boot有着良好的集成,且默认由Spring Boot Starter Logging提供。如果您有特定需求需要使用其他日志实现(如Log4j2),则应确保排除其他所有SLF4J绑定。

  • 清理类路径
    定期检查依赖管理工具(如Maven或Gradle)生成的依赖报告,确保没有意外引入的SLF4J绑定。如果有,通过排除依赖或调整依赖版本来移除多余的绑定。

  • 遵循最佳实践
    遵循Spring Boot官方文档推荐的日志配置方法,确保所有日志配置集中且一致。避免在应用代码中硬编码日志实现相关的配置或API调用。

因此,尽管Spring Boot项目在技术上可以包含多个SLF4J绑定类库,但从最佳实践和避免潜在问题的角度出发,应当确保项目中只有一个选定的日志实现库与SLF4J绑定。


解决方案:

  1. 寻找项目中到底是哪些依赖都绑定了SLF4J类库

在IDEA底下 终端 中使用 mvn dependency:tree 命令列出当前项目所引入的依赖

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注意

上述mvn命令的前提是你的电脑配了mvn系统环境变量

如果想要更详细的探究依赖引入情况,可以参考如下步骤

①将鼠标光标置于当前项目的pop.xml文件中,右击按照以下步骤打开项目依赖图

在这里插入图片描述
在这里插入图片描述

Ctrl + F 打开图元素选框,选择包含SLF4J的图元素,它会自动定位于所选定的图元素

在这里插入图片描述
在这里插入图片描述
注意

你可以根据带箭头的直线前后详细低地查看各个类库的依赖引入关系

  1. 通过上述命令得知,spring-boot-starter-test类库与dashscope-sdk-java类库都绑定了SLF4J类库,任选其一,在pop.xml中移除所绑定的SLF4J类库即可(我这里是在dashscope-sdk-java里移除了SLF4J的绑定)

代码示例如下

        <dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.10.1</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId></exclusion></exclusions></dependency>
  1. 刷新Maven变更

在这里插入图片描述
4. 重启项目,SLF4J报错信息消失

在这里插入图片描述
至此,debug解决问题成功!!!


参考资料:

  • [已解决] SLF4J: Class path contains multiple SLF4J bindings

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发VS并行

参考文章 面试必考的&#xff1a;并发和并行有什么区别&#xff1f; 并发&#xff1a;一个人同时做多件事&#xff08;射击游戏队友抢装备&#xff09; 并行&#xff1a;多人同时处理同一件事&#xff08;射击游戏敌人同时射击对方&#xff09;

学习数据结构:算法的时间复杂度和空间复杂度

一、算法的复杂度 衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算法的运行快慢&#xff0c;而空间复杂度主要衡量一个算法运行所需要的额外空间。 算法的时间复杂度 算法中的基本操作的…

SAP BAS中Fiori开发的高阶功能(storyboard, navigation, guided development, variant)

1. 前言 在之前的几篇文章中&#xff0c;我介绍了SAP BAS的一些基本功能&#xff0c;包括账户申请&#xff0c;创建工作区&#xff0c;git的使用以及如何step-by-step去创建出你的第一个Fiori项目等等。在本篇中&#xff0c;我将进一步介绍一些在开发Fiori应用程序时会用到的高…

JAVA学习笔记19(面向对象编程)

1.面向对象编程 1.1 类与对象 1.类与对象的概念 ​ *对象[属性]/[行为] ​ *语法 class cat {String name;int age; }main() {//cat1就是一个对象//创建一只猫Cat cat1 new Cat();//给猫的属性赋值cat1.name "123";cat1.age 10; }​ *类是抽象的&#xff0c;…

前端使用正则表达式进行校验

一、定义 设计思想是用一种描述性的语言定义一个规则&#xff0c;凡是符合规则的字符串&#xff0c;我们就认为它“匹配”了&#xff0c;否则&#xff0c;该字符串就是不合法的。 在 JavaScript中&#xff0c;正则表达式也是对象&#xff0c;构建正则表达式有两种方式&#x…

【可用Claude Opus模型】Claude3国内镜像站,亲测完全超越GPT-4(可用Claude Opus,官网价值20刀)

#今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用Claude 3吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像站到处都是…

探索LLaMA模型:架构创新与Transformer模型的进化之路

引言 在人工智能和自然语言处理领域&#xff0c;预训练语言模型的发展一直在引领着前沿科技的进步。Meta AI&#xff08;前身为Facebook&#xff09;在2023年2月推出的LLaMA&#xff08;Large Language Model Meta AI&#xff09;模型引起了广泛关注。LLaMA模型以其独特的架构…

视频批量爬虫下载工具|可导出视频分享链接|抖音视频提取软件

便捷的视频批量爬虫软件操作指南 抖音视频下载界面图解 主要功能&#xff1a; 关键词批量提取视频和单独视频提取&#xff0c;提取后下载功能。 功能解析&#xff1a; 1. 关键词批量采集视频的解析 对特定关键词进行搜索和视频提取&#xff0c;例如输入“汽车配件”&#x…

2024年洗地机综合实力排行榜:谁才是真正的洗地神器?

近年来&#xff0c;洗地机在行业里&#xff0c;它集合了扫地和拖地以及自动清洁和除菌的功能&#xff0c;备受人们的喜爱&#xff0c;尤其是平时忙于工作并没有多少时间清洁家务的用户&#xff0c;但是对于第一次接触洗地机的用户来说&#xff0c;怎么选购洗地机也是个问题&…

初识React(一)从井字棋游戏开始

写在前面&#xff1a; 磨磨唧唧了好久终于下定决心开始学react&#xff0c;刚刚接触感觉有点无从下脚...新的语法新的格式跟vue就像两种物种...倒是很好奇路由和store是怎么实现的了~v~&#xff0c;一点一点来吧&#xff01;&#xff01;&#xff01; (一)创建项目 使用vite…

蓝桥杯算法 - DP

上一篇&#xff1a;[[蓝桥杯算法-排序、递归、全排列]] 动态规划&#xff08;dp&#xff09; dp即动态规划&#xff0c;常用于&#xff1a;数学&#xff0c;计算机科学&#xff0c;管理学&#xff0c;经济和生物信息学。 dp在生活中也很常见&#xff0c;如&#xff1a;你今天…

今天聊聊Docker

在数字化时代&#xff0c;软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术&#xff0c;正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景&#xff0c;帮…

1.4.2 练习

一、颠倒三角形 题目&#xff1a;修改顶点着色器让三角形上下颠倒 更改顶点着色器代码如下&#xff1a; #version 330 corelayout (location 0) in vec3 aPos; //位置变量的属性位置值为0 layout (location 1) in vec3 aColor; //颜色变量的属性位置值为1out vec3 ourColo…

项目配置之道:优化Scrapy参数提升爬虫效率

前言 在当今信息时代&#xff0c;数据是无处不在且无比重要的资源。为了获取有效数据&#xff0c;网络爬虫成为了一项至关重要的技术。Scrapy作为Python中最强大的网络爬虫框架之一&#xff0c;提供了丰富的功能和灵活的操作&#xff0c;让数据采集变得高效而简单。本文将以爬…

线程和进程有什么区别?

1、典型回答 进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是操作系统中两个重要的概念&#xff0c;都是用来执行任务的&#xff0c;它们的定义如下&#xff1a; 进程是指计算机中正在运行的程序的实例。每个进程都有自己的地址空间、内存、文件…

生成词云...

import wordcloud import jieba import PIL import numpy as np import matplotlib.pyplot as plt import jieba.analyse image_background PIL.Image.open(/home/back/pythonclass/11.jpg) #遮罩 MASK np.array(image_background) txtopen("/home/back/pythoncla…

如何本地部署Imagewheel并实现无公网IP远程连接打造个人云图床

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

Mysql数据库——数据备份与恢复

目录 一、数据备份的重要性 二、数据库备份的分类 1.从物理与逻辑的角度分类 2.从数据库的备份策略角度&#xff0c;备份可分为 2.1完全备份 2.2差异备份 2.3增量备份 2.4总结 三、常见的备份方法 四、Mysql数据库完全备份 1.完全备份定义 2.优缺点 3.数据库完全备…

2024南京人工智能展会:定于2024年11月份在南京国际博览中心举行

2024南京国际人工智能展览会&#xff0c;拟定于2024年11月份在南京国际博览中心隆重召开。这一盛大的科技盛宴&#xff0c;无疑将为全球人工智能领域注入新的活力&#xff0c;推动科技创新与社会进步。 此次展览会将以“智能未来&#xff0c;共创辉煌”为主题&#xff0c;汇聚全…

Hbase 王者荣耀数据表 HBase常用Shell命令

大数据课本&#xff1a; HBase常用Shell命令 在使用具体的Shell命令操作HBase数据之前&#xff0c;需要首先启动Hadoop&#xff0c;然后再启动HBase&#xff0c;并且启动HBase Shell&#xff0c;进入Shell命令提示符状态&#xff0c;具体命令如下&#xff1a; $ cd /usr/local…