当前位置: 首页 > 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去掉相关包之后,启动项目报错,说明不是这里冲突,改回来继续修改下一处即可。 

相关文章:

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

sringboot原本使用的是logback日志框架&#xff0c;将它去掉&#xff0c;修改为log4j2日志框架后&#xff0c;往往会出现以下错误&#xff1a; SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/ch/qos…...

k8s+zabbix

一&#xff0c;环境&#xff1a; 1&#xff09;&#xff0c;k8s部署&#xff0c;master和node节点都部署成功 二&#xff0c;部署&#xff1a; 1&#xff09;&#xff0c;安装python3&#xff08;资源中有&#xff09; wget https://www.python.org/ftp/python/3.7.4/Python-…...

k8s-生产级的k8s高可用(2) 25

部署containerd k8s2、k8s3、k8s4在配置前需要重置节点&#xff08;reset&#xff09;在上一章已完成 禁用所有节点docker和cri-docker服务 所有节点清除iptables规则 重置后全部节点重启 由于之前部署过docker&#xff0c;因此containerd默认已安装 修改配置 启动containe…...

ubuntu20.04 创建ros环境、创建rospackage

roswiki教程&#xff1a;https://wiki.ros.org/cn/ROS/Tutorials 环境准备 安装ros环境 这里选择noetic版本的ros&#xff0c;安装步骤参考&#xff1a;https://zhuanlan.zhihu.com/p/662284005 创建工作空间 这里我在用户目录下创建catkin的工作目录catkin_ws &#xff0…...

QT进阶---------pro项目文件中的常用命令 (第三天)

1、命令一 决定exe可执行程序的生成路径CONFIG 作用&#xff1a;不使用默认路径&#xff0c;方便移植 CONFIG(debug, debug|release) {DESTDIR $$_PRO_FILE_PWD_/../../../debugXXXsystem } else {DESTDIR $$_PRO_FILE_PWD_/../../../realeaseXXXsystem } 是用于 Qt 项目…...

php常用设计模式应用场景及示例

单例模式 含义描述 应用程序中最多只有该类的一个实例存在 应用场景 常应用于数据库类设计&#xff0c;采用单例模式&#xff0c;只连接一次数据库&#xff0c;防止打开多个数据库连接。 代码示例 class Singleton {private static $instance; // 定义一个私有的静态变量保存…...

浏览器与服务器通信过程(HTTP协议)

目录 1 概念 2 常见的 web 服务器有 3 浏览器与服务器通信过程 3.1 DNS 3.2 URL 4 HTTP请求方法和应答状态码 4.1 HTTP请求报文段实例 4.2 HTTP请求方法 5 HTTP应答报头和应答状态 5.1 HTTP的应答报头结构 5.2 HTTP的应答状态 1 概念 浏览器与 web 服务器在应用层通…...

Pytorch搭建AlexNet 预测实现

1.导包 import torch import matplotlib.pyplot as plt import json from model import AlexNet from PIL import Image from torchvision import transforms 2.数据预处理 data_transform transforms.Compose([transforms.Resize((224, 224)), # 将图片重新裁剪transform…...

笔记:使用parfile进行的数据导入导出

expdp ‘username/password’ parfileE:\dmp_tmp\par.txt DIRECTORYdmptmp LOGFILESYS_SEND_LOG.log DUMPFILESYS_SEND_LOG.dmp tablesSYS_SEND_LOG_BAK query“where send_dt>TO_DATE(‘2024-03-13’,‘yyyy-mm-dd’)” impdp ‘username/password’ directorydmptmp dum…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的行人跌倒检测系统(深度学习+UI界面+完整训练数据集)

摘要&#xff1a;开发行人跌倒检测系统在确保老年人安全方面扮演着至关重要的角色。本篇文章详尽地阐述了如何利用深度学习技术构建一个行人跌倒检测系统&#xff0c;并附上了完整的代码实现。该系统采用了先进的YOLOv8算法&#xff0c;并对YOLOv7、YOLOv6、YOLOv5等先前版本进…...

Ubuntu 14.04:PaddleOCR基于PaddleServing的在线服务化部署(失败)

一、 二、安装 注&#xff1a; 安装 PaddleOCR 2.3 。 因为 PaddleOCR 2.4 的 推荐环境 PaddlePaddle > 2.1.2。 https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.4/doc/doc_ch/environment.md 安装前的环境准备 在使用Paddle Serving之前&#xff0c;需要完…...

Java JUC 笔记(2)

Java JUC 笔记&#xff08;2&#xff09; 锁框架 JDK5以后增加了Lock接口用来实现锁功能&#xff0c;其提供了与synchronized类似的同步功能&#xff0c;但是在使用时手动的获取和释放锁 Lock和Condition锁 这里的锁与synchronized锁不太一样&#xff0c;我们可以认为是Loc…...

webpack5高级--02_提升打包构建速度

提升打包构建速度 一、HotModuleReplacement 为什么 开发时我们修改了其中一个模块代码&#xff0c;Webpack 默认会将所有模块全部重新打包编译&#xff0c;速度很慢。 所以我们需要做到修改某个模块代码&#xff0c;就只有这个模块代码需要重新打包编译&#xff0c;其他模…...

MAC M芯片 Anaconda安装

Anaconda安装 1.M芯片下载AnaConda 1.M芯片下载AnaConda https://www.anaconda.com/download 安装完成 conda的版本是24.1.2...

【JS】自动下拉网页刷新,当出现指定关键字,就打印出来

批量检查域名是否可以注册 1、有的网站数据是通过下拉发生请求&#xff0c;间隔x毫秒自动下拉 2、查找某个关键字&#xff0c;找到就打印出来 3、打印数据自动去重 4、当连续n次下拉&#xff0c;没有新div元素出来&#xff0c;就停止该循环 var map {}; var count 0; var l…...

中兴通讯联手新疆移动,开通全疆首个乡农场景700M+900M双频双模基站

日前&#xff0c;在新疆博尔塔拉蒙古自治州&#xff0c;中兴通讯携手新疆移动共同完成了全疆首个乡农场景的700M900M双频双模基站建设&#xff0c;其通过采用“700M与900M共天馈共RRU设备”&#xff0c;成功实现乡农4/5G网络的同站址快速部署&#xff0c;为新疆的农牧业发展注入…...

爬虫案例4: parsel 模块的运用

目标页面: https://www.shanghairanking.cn/rankings/bcur/2023 打印在终端import requests import json from urllib.parse import urljoin from parsel import Selectorurl https://www.shanghairanking.cn/rankings/bcur/2023headers {User-Agent: Mozilla/5.0 (Macintosh…...

数据结构·复杂度

目录 1 时间复杂度 2 大O渐进表示法 举例子&#xff08;计算时间复杂度为多少&#xff09; 3 空间复杂度 前言&#xff1a;复杂度分为时间复杂度和空间复杂度&#xff0c;两者是不同维度的&#xff0c;所以比较不会放在一起比较&#xff0c;但是时间复杂度和空间复杂度是用…...

数学建模理论与实践国防科大版

目录 1.数学建模概论 2.生活中的数学建模 2.1.行走步长问题 2.2.雨中行走问题 2.3.抽奖策略 2.4.《非诚勿扰》女生的“最优选择” 3.集体决策模型 3.1.简单多数规则 3.2.Borda数规则 3.3.群体决策模型公理和阿罗定理 1.数学建模概论 1.数学模型的概念 2.数学建模的概…...

Yakit爆破模块应用

yakit介绍 一款集成了各种渗透测试功能的集成软件。&#xff08;类似于burp&#xff0c;但我感觉他功能挺强大&#xff09; 爆破模块位置 按照下面图标点击 界面就是如下。 左侧可以选择爆破的类型&#xff0c;各种数据库http&#xff0c;ssh等都支持。 爆破参数 可以选择…...

使用openclaw龙虾采集电商数据

最近openclaw养龙虾的热潮带动了skill的爆发&#xff0c;github上各种skill层出不穷&#xff0c;可以解决繁杂的办公自动化任务&#xff0c;比如生成ppt、运营媒体账号、审查代码等&#xff0c;skill已经成为ai时代的“万能软件”。 刚好有个朋友是做跨境3D打印业务&#xff0…...

RAG系统里最容易被低估的环节:深度解析检索优化策略,提升大模型应用效果!

本文深入剖析了RAG系统中检索环节的重要性&#xff0c;指出检索错误是导致大模型应用效果不佳的关键因素。文章从表达鸿沟、粒度鸿沟和意图鸿沟三重鸿沟出发&#xff0c;详细介绍了Query侧优化&#xff08;如Query Rewriting、Multi-Query、HyDE&#xff09;、索引侧优化&#…...

SEO_从零开始,手把手教你制定SEO优化方案(237 )

SEO从零开始&#xff1a;初学者手把手教你制定SEO优化方案 在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了网站流量获取的重要途径之一。无论你是新开网站的小主人&#xff0c;还是希望提升现有网站排名的企业&#xff0c;掌握SEO优化方案的基本…...

1985-2025年全国省/市/区县土地利用分类面积及占比统计数据

数据介绍 全国土地利用分类面积统计数据&#xff08;1985-2025&#xff09; 数据简介 本数据集基于1985-2025年30米分辨率土地利用分类数据&#xff0c;结合行政区划边界&#xff0c;提供全国省、市、县三级行政单元的土地利用分类面积及占比统计&#xff0c;为土地利用变化…...

程序员必看:代码注释规范与最佳实践

1. 程序员与注释的爱恨情仇作为一名在代码海洋里摸爬滚打多年的老程序员&#xff0c;我见过太多令人啼笑皆非的代码注释。这些注释有的像谜语&#xff0c;有的像情书&#xff0c;有的干脆就是行为艺术。今天我们就来聊聊这个让无数程序员又爱又恨的话题——代码注释。记得我刚入…...

基于S7-200 PLC和组态王矿井通风控制

基于S7-200 PLC和组态王矿井通风控制矿井通风系统的自动化控制对安全生产太重要了。老张上次下井巡检时说&#xff1a;"现在这通风系统比二十年前强多了&#xff0c;以前手动调风门得拿命赌操作工的手速。"今天咱们就聊聊怎么用S7-200 PLC和组态王搞矿井通风控制&…...

linux学习进展 基础命令 vi基础命令

Linux系统的核心操作依赖命令行&#xff0c;掌握基础命令是入门Linux的关键&#xff0c;而vi编辑器作为Linux自带的文本编辑工具&#xff0c;日常使用频率极高。本次笔记主要记录Linux常用基础命令及vi编辑器的核心操作&#xff0c;方便后续复习巩固&#xff0c;兼顾实用性和易…...

一篇文章帮你认识JDBC!!!

一、基础概念1. 什么是 JDBCJDBC&#xff08;Java DataBase Connectivity&#xff09;&#xff1a;Java 语言操作关系型数据库的一套API&#xff08;规范 / 接口&#xff09;。作用&#xff1a;让 Java 程序可以统一连接、操作 MySQL、Oracle、SQL Server 等数据库。2. JDBC 本…...

海康工业相机——Python二次开发实战:构建实时条形码识别系统

1. 环境准备与硬件选型 第一次接触海康工业相机时&#xff0c;我被它金属外壳下的精密光学元件震撼到了。这种工业级设备和我们平时用的消费级摄像头完全不同&#xff0c;它的稳定性、帧率和图像质量完全是为生产线环境设计的。如果你手头正好有台海康相机&#xff0c;跟着我的…...

基于NodeJS与CODESYS的OPC UA通信实战:从零搭建工业数据桥梁

1. 为什么需要NodeJS与CODESYS的OPC UA通信&#xff1f; 在工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;就像工厂的"大脑"&#xff0c;负责控制各种设备运行。而CODESYS则是开发PLC程序的"瑞士军刀"&#xff0c;几乎支持所有主…...