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

记录日志中logback和log4j2不能共存的问题

本文章记录设置两个日志时候,控制台直接报错

标黄处就是错误原因:1. SLF4J(W):类路径包含多个SLF4J提供程序

SLF4J(W):找到提供程序[org.apache.logging.slf4j. net]。

SLF4J(W):找到提供程序[ch.qos.log .classic.spi. SLF4JServiceProvider@50d0686]。

SLF4J(I):实际提供程序的类型为[org.apache.logging.slf4j]。SLF4JServiceProvider@50d0686]线程“main”异常java.lang.ExceptionInInitializerError:

从而引起的记录异常 : 2. log4j-slf4j2-impl不能与log4j-to-slf4j一起出现


下面分析原因:

  •  两者都是日志的实现方式,也是当下最流行的,但是 logback是官方提供的,而 slf4j是开源的,也就是说两者作者不是一个人

  • 但是这也不是二者起冲突的原因,主要原因是因为以下两点(如图所示

    • 1. 重复引入 slf4j-api,这可能会导致类路径中存在 多个 SLF4J API 的版本

    • 2. 日志实现的多重性

      • 项目中同时引入了 log4j-to-slf4j 以及 spring-boot-starter-logging两个依赖,导致日志的实现冲突,在spring-boot-starter-logging 中,期望的是使用Logback,使用的是jul-to-slf4j 桥接器;而log4j-to-slf4j 桥接器试图将 Log4j 的日志转换为 SLF4J 的日志。

      • 注意:spring-boot-starter-web中已经包含了spring-boot-starter-logging依赖;
    • ​​​​​3. log4j-slf4j2-impl 和 log4j-to-slf4j 之间的不兼容性主要源于它们各自的设计使用不同。

      • 区别:它们处理的日志框架不同(Log4j 1 与 Log4j 2)
        • log4j-slf4j2-impl这是 Log4j 2 的实现,它将 SLF4J 日志调用传递给 Log4j 2。这意味着当您使用 SLF4J API 记录日志时,日志消息实际上会被 Log4j 2 处理。这种实现是专门为支持新的 Log4j 2 框架而设计的。
        • log4j-to-slf4j这是一个桥接器,用于将 Log4j 1 的日志事件转发到 SLF4J。这意味着它使得 Log4j 1 的用户能够无缝地使用 SLF4J,而不需要修改代码来适应 SLF4J。
      • 引发的问题:
        • Log4j 2 期望接收 SLF4J 的调用并基于此生成日志。Log4j 1(通过 log4j-to-slf4j)则尝试将 Log4j 事件转发到 SLF4J。
        • SLF4J 的调用可能被  指向 Log4j 2 实现但依赖于 log4j-to-slf4j 的 Log4j 1 的事件则可能无法被正确处理这样可能导致日志丢失、重复记录或混乱的日志输出。

    • 解决方法:

      • 根据项目需要选择其中一个,并移除不必要的日志实现依赖。

        • 一般的项目默认使用的都是 Logback日志的实现,导致冲突都是引入Log4j2 日志实现而引起的。

        • 所以下面方法是针对 要使用Log4j2 作为日志实现方式的修改

        • 排除Logback日志的实现方式

          <!--web前端互动的依赖--><!-- -starter-web 依赖中自动添加了 starter-logging 也就是logback 日志实现方式 的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!--由于 引入了log4j2 日志实现方式 的依赖,两个日志实现方式会同时引入两种桥接器,导致程序报错。  --><!--排除starter-logging 也就是logback 日志实现方式 的依赖--><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>

下面是我遇见的其他问题

在完成上面操作后,还是不能排除 spring-boot-starter-logging 依赖项,通过 mvn dependency:tree  查看了依赖树,发现在:  spring-boot-starter 依赖中也包含这这个依赖项,检查pom.xml文件发现没有这个依赖项,最后在父工程的pom.xml中发现这个依赖。

相关文章:

记录日志中logback和log4j2不能共存的问题

本文章记录设置两个日志时候&#xff0c;控制台直接报错 标黄处就是错误原因&#xff1a;1. SLF4J(W)&#xff1a;类路径包含多个SLF4J提供程序。 SLF4J(W)&#xff1a;找到提供程序[org.apache.logging.slf4j. net]。 SLF4J(W)&#xff1a;找到提供程序[ch.qos.log .classi…...

第5章: 图像变换与仿射操作

图像变换和仿射操作是图像处理中常用的技术&#xff0c;通过旋转、缩放、平移、剪裁等操作&#xff0c;可以实现多种视觉效果以及数据增强。 1.1 图像旋转 1.1.1 基础旋转操作 使用 rotate() 方法可以对图像进行旋转操作&#xff0c;指定旋转的角度&#xff08;以度为单位&am…...

【计算机网络】【网络层】【习题】

计算机网络-传输层-习题 文章目录 13. 图 4-69 给出了距离-向量协议工作过程&#xff0c;表&#xff08;a&#xff09;是路由表 R1 初始的路由表&#xff0c;表&#xff08;b&#xff09;是相邻路由器 R2 传送来的路由表。请写出 R1 更新后的路由表&#xff08;c&#xff09;。…...

Scala的不可变Map常用操作

//类型&#xff1a;不可变&#xff0c;可变 //操作&#xff1a;添加元素&#xff0c;删除元素&#xff0c;查询元素&#xff0c;删除元素&#xff0c;遍历 object map {def main(args: Array[String]): Unit {//不可变Mapval map1 Map("鄂"->"湖北省"…...

nginx配置负载均衡详解

在现代的 web 应用中&#xff0c;负载均衡是确保高可用性、可扩展性和稳定性的关键技术之一。Nginx 是一个非常流行的反向代理服务器和负载均衡器&#xff0c;它支持多种负载均衡策略&#xff0c;能够帮助将客户端的请求分发到多个后端服务器&#xff0c;以提高系统的整体性能和…...

传奇996_19——龙岭总结

功能&#xff1a; 切割 切割属性&#xff1a; 即人物属性&#xff0c;可以设置临时属性或者永久属性&#xff0c;龙岭使用的是临时属性&#xff0c;所谓临时就是存在有效期&#xff0c;龙岭设置的有效期是123456789秒&#xff0c;即1428.89802天。 龙岭写法&#xff08;倒叙…...

el-table 行列文字悬浮超出屏幕宽度不换行的问题

修改前的效果 修改后的效果 ui框架 element-plus 在网上找了很多例子都没找到合适的 然后这个东西鼠标挪走就不显示 控制台也不好调试 看了一下El-table的源码 他这个悬浮文字用的el-prpper 包着的 所以直接改 .el-table .el-propper 设置为max-width:1000px 就可以了 吐槽一…...

鸿蒙HarmonyOS 网络请求获取数据Http

注意的是;要为接口返回值指定类型 &#xff0c;以及定义接口数据类型 index.ets import { http } from kit.NetworkKit;interface createAtType {date: number,}interface dataListType {createAt: createAtType;imgUrl: }Component export default struct TabBar {State dat…...

MySQL技巧之跨服务器数据查询:高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中

MySQL技巧之跨服务器数据查询&#xff1a;高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中 基础篇已经描述&#xff1a;借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的…...

JavaScript逆向爬虫教程-------基础篇之JavaScript密码学以及CryptoJS各种常用算法的实现

目录 一、密码学介绍 1.1 为什么要学密码学?1.2 密码学里面学哪一些 二、字符编码三、位运算四、Hex 编码与 Base64 编码 4.1 Hex 编码4.2 Base64 编码 五、消息摘要算法 5.1 简介5.2 JS中的MD5、SHA、HMAC、SM3 六、对称加密算法 6.1 介绍6.2 加密模式和填充方式6.3 CryptoJ…...

【分布式】万字图文解析——深入七大分布式事务解决方案

分布式事务 分布式事务是指跨多个独立服务或系统的事务管理&#xff0c;以确保这些服务中的数据变更要么全部成功&#xff0c;要么全部回滚&#xff0c;从而保证数据的一致性。在微服务架构和分布式系统中&#xff0c;由于业务逻辑往往会跨多个服务&#xff0c;传统的单体事务…...

apache2配置多站点

环境 ubuntu 14.04 apache2 Server version: Apache/2.4.7 (Ubuntu) Server built: Apr 3 2019 18:04:25 步骤 修改/etc/apache2/sites-enabled/000-default.conf 增加VirtualHost段&#xff0c;指定不同的ServerName、DocumentRoot等参数 <VirtualHost *:80>…...

基于PyQt Python的深度学习图像处理界面开发(一)

Python标准库更多的适合处理后台任务&#xff0c;唯一的图形库tkinter使用起来很不方便&#xff0c;所以后来出现了针对Python图形界面开发的扩展库&#xff0c;例如PyQt。 在介绍PyQt之前&#xff0c;必须先简单介绍一下Qt。Qt是一个C可视化开发平台&#xff0c;是一个跨平台的…...

【Linux网络】Linux网络编程套接字,UDP与TCP

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;Linux “ 登神长阶 ” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀Linux网络编程套接字 &#x1f4d2;1. 端口号&#x1f4dc;2. 初识TCP协议与UDP协议&#x1…...

Vue3 -- 强制统一包管理器工具【企业级项目配置保姆级教程6】

引言: 团队开发项目的时候,需要统一包管理器工具,因为不同包管理器工具下载同一个依赖,可能版本不一样,导致项目出现bug问题,因此包管理器工具需要统一管理!!所以就需要我们强制统一包管理器工具。 创建scripts目录和preinstall.js文件: 在根目录创建scritps/preinstal…...

Winform实现自制浏览器JavaScript注入

让我们一起走向未来 &#x1f393;作者简介&#xff1a;全栈领域优质创作者 &#x1f310;个人主页&#xff1a;百锦再新空间代码工作室 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[1504566…...

【工具插件类教学】在 Unity 中使用 iTextSharp 实现 PDF 文件生成与导出

目录 一、准备工作 1. 安装 iTextSharp 2. 准备资源文件 二、创建 ExportPDFTool 脚本 1、初始化 PDF 文件,设置字体 2、添加标题、内容、表格和图片 三、使用工具类生成 PDF 四、源码地址 在 Unity 项目中,我们有时会需要生成带有文本、表格和图片的 PDF 文件,以便…...

javascript用来干嘛的?赋予网站灵魂的语言

javascript用来干嘛的&#xff1f;赋予网站灵魂的语言 在互联网世界中&#xff0c;你所浏览的每一个网页&#xff0c;背后都有一群默默工作的代码在支撑着。而其中&#xff0c;JavaScript就像是一位技艺精湛的魔术师&#xff0c;它赋予了网页生命力&#xff0c;让原本静态的页…...

Flutter Getx状态管理

在 Flutter 开发中&#xff0c;状态管理是一个非常重要的话题。随着应用变得更加复杂&#xff0c;状态管理的方式也变得越来越多。Flutter 提供了多种状态管理的解决方案&#xff0c;如 Provider、Riverpod、BLoC 等&#xff0c;而在这些选项中&#xff0c;GetX 作为一个轻量级…...

《成法》读书笔记

稻盛和夫的《成法》是一部关于个人和企业成功哲学的作品&#xff0c;结合了他在经营京瓷和KDDI&#xff0c;以及重建日航&#xff08;JAL&#xff09;过程中的经验和智慧。 以下是这本书的读书笔记&#xff0c;涵盖其核心思想和重要概念&#xff1a; 1. 以“心”为本 内容概…...

抖音批量下载工具:3步搞定无水印视频批量保存

抖音批量下载工具&#xff1a;3步搞定无水印视频批量保存 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…...

三步解锁B站4K高清视频:免费下载大会员专属内容终极指南

三步解锁B站4K高清视频&#xff1a;免费下载大会员专属内容终极指南 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是不是也遇到过…...

还在为macOS与Android文件传输而烦恼吗?OpenMTP给你终极解决方案!

还在为macOS与Android文件传输而烦恼吗&#xff1f;OpenMTP给你终极解决方案&#xff01; 【免费下载链接】openmtp OpenMTP - Advanced Android File Transfer Application for macOS 项目地址: https://gitcode.com/gh_mirrors/op/openmtp 你是否曾经在macOS上尝试连接…...

CyberChef:浏览器中的数据安全处理实践

CyberChef&#xff1a;浏览器中的数据安全处理实践 【免费下载链接】CyberChef The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis 项目地址: https://gitcode.com/GitHub_Trending/cy/CyberChef CyberChef是一款基于浏…...

NotebookLM视频转文字API未公开的底层协议解析:如何绕过30分钟时长限制并批量处理TB级教学视频

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM视频转文字功能概览与官方限制边界 NotebookLM 是 Google 推出的面向研究者与知识工作者的 AI 助手&#xff0c;其核心能力之一是基于用户上传的内容&#xff08;如 PDF、网页、音频&#xf…...

历史性突破,OpenAI模型搞定人类科学家80年未破难题,能发顶刊了

OpenAI 7个月前曾因虚假数学突破被同行嘲笑。 智东西5月21日报道&#xff0c;今日&#xff0c;OpenAI宣布&#xff0c;其一款未对外发布的内部通用推理模型&#xff0c;独立完成了一份原创数学证明。该证明推翻了匈牙利数学家保罗埃尔德什&#xff08;Paul Erdős&#xff09;…...

深度解析 StoreClaw:面向电商全域的 “懂销售” 智能体技术架构与核心实现原理

摘要随着大语言模型、多智能体协同、实时数据分析与自动化决策技术的快速迭代&#xff0c;AI 正从辅助工具向业务执行主体演进。传统电商平台数字化工具多停留在数据统计、报表展示、基础客服层面&#xff0c;缺乏具备自主感知、自主分析、自主决策、自主执行的闭环能力&#x…...

小白程序员必看:收藏这份分词知识框架,轻松入门大模型!

分词是NLP和大型语言模型处理文本的第一步。本文系统介绍了分词的基本概念&#xff0c;详细解析了英文和中文的分词方法&#xff0c;包括词级、字符级和子词级分词的原理与区别。特别强调了子词级分词&#xff08;如BPE、WordPiece&#xff09;在解决OOV问题和保留语义结构方面…...

如何快速解锁百度网盘资源:baidupankey智能查询工具终极指南

如何快速解锁百度网盘资源&#xff1a;baidupankey智能查询工具终极指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗&#xff1f;每次遇到需要提取码的资源&#xff0c;都要在多个…...

原神帧率解锁终极指南:简单三步突破60FPS限制

原神帧率解锁终极指南&#xff1a;简单三步突破60FPS限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神帧率解锁工具是一款专门为《原神》PC玩家设计的开源工具&#xff0c;能够安…...