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

slf4j依赖冲突处理

文章目录

  • 使用logback输出日志
    • 项目依赖
    • 兼容使用log4j(v1)的代码
    • 兼容使用jcl的代码
    • 兼容使用log4j(v2)的代码
  • 使用log4j(v2)输出日志
    • 项目依赖
    • 兼容使用log4j(v1)的代码
    • 兼容使用jcl的代码
    • 兼容使用logback的代码

为了所有代码的日志统一使用一个配置来控制输出,需要进行日志相关依赖的整理

使用logback输出日志

spring应用默认的日志输出工具;

项目依赖

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback.version}</version>
</dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version>
</dependency>

兼容使用log4j(v1)的代码

如果项目的某个依赖传递引入了log4j、reload4j,证明这个依赖在使用log4j(v1)的loggerFactory;
如果希望这个依赖里的代码打印的日志由logback控制输出,需包含的依赖如下:

<dependency><!-- 提供log4j(v1)的api,slf4j介入实际输出 --><groupId>org.slf4j</groupId><artifactId>log4j-over-slf4j</artifactId><version>${slf4j.version}</version>
</dependency>

需排除的依赖:

            <exclusions><exclusion><!-- log4j(v1)的api+核心功能 --><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion><exclusion><!-- 避免slf4j最终绑定到log4j(v1) --><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><!-- log4j(v1)的安全漏洞修复版 --><groupId>ch.qos.reload4j</groupId><artifactId>reload4j</artifactId></exclusion><exclusion><!-- 避免slf4j最终绑定到log4j(v1) --><groupId>org.slf4j</groupId><artifactId>slf4j-reload4j</artifactId></exclusion></exclusions>

兼容使用jcl的代码

需包含的依赖:

<dependency><!-- 提供commons-logging的api,slf4j介入实际输出 --><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version>
</dependency>

需排除的依赖:

            <exclusions><exclusion><!-- jcl的api+核心功能 --><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion><exclusion><!-- 避免slf4j最终绑定到jcl --><groupId>org.slf4j</groupId><artifactId>slf4j-jcl</artifactId></exclusion></exclusions>

兼容使用log4j(v2)的代码

需包含的依赖:

<dependency><!-- 提供log4j(v2)的api --><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j2.version}</version>
</dependency>
<dependency><!-- 实际输出交接给slf4j --><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-to-slf4j</artifactId><version>${log4j2.version}</version>
</dependency>

需排除的依赖:

            <exclusions><exclusion><!-- log4j(v2)的核心功能 --><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId></exclusion><exclusion><!-- 避免slf4j最终绑定到log4j(v2) --><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId></exclusion></exclusions>

使用log4j(v2)输出日志

hive3默认的日志输出工具;

项目依赖

<dependency><!-- 传递引入log4j-api和log4j-core --><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version>
</dependency>

兼容使用log4j(v1)的代码

需包含的依赖:

<dependency><!-- 提供log4j(v1)的api,slf4j介入实际输出 --><groupId>org.slf4j</groupId><artifactId>log4j-over-slf4j</artifactId><version>${slf4j.version}</version>
</dependency>

需排除的依赖:

            <exclusions><exclusion><!-- log4j(v1)的api+核心功能 --><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion><exclusion><!-- 避免slf4j最终绑定到log4j(v1) --><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><!-- log4j(v1)的安全漏洞修复版 --><groupId>ch.qos.reload4j</groupId><artifactId>reload4j</artifactId></exclusion><exclusion><!-- 避免slf4j最终绑定到log4j(v1) --><groupId>org.slf4j</groupId><artifactId>slf4j-reload4j</artifactId></exclusion></exclusions>

兼容使用jcl的代码

需包含的依赖:

<dependency><!-- 提供commons-logging的api,slf4j介入实际输出 --><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version>
</dependency>

需排除的依赖:

            <exclusions><exclusion><!-- jcl的api+核心功能 --><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion><exclusion><!-- 避免slf4j最终绑定到jcl --><groupId>org.slf4j</groupId><artifactId>slf4j-jcl</artifactId></exclusion></exclusions>

兼容使用logback的代码

排除依赖即可,logback并不提供专用的loggerFactory来初始化logger对象

            <exclusions><exclusion><!-- 避免slf4j最终绑定到logback --><groupId>ch.qos.logback</groupId><artifactId>*</artifactId></exclusion></exclusions>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • torchvision.transforms.ToPILImage()使用
  • MySQL 故障排查与性能优化指南
  • 韶音开放式耳机好用吗?南卡、韶音、Oladance、Cleer热门开放式耳机一周横评
  • 【Gateway】网关服务快速上手
  • uniapp数据缓存和发起网络请求
  • Unity Apple Vision Pro 开发(五):PolySpatial 2.0 导入方式
  • flink中slotSharingGroup() 的详解
  • 相亲交友程序系统开发产品分析
  • 【H2O2|全栈】关于HTML(4)HTML基础(三)
  • 掌握Go语言中的时间与日期操作
  • 影刀RPA实战:自动化批量生成条形码完整指南
  • 设计模式 解释器模式(Interpreter Pattern)
  • spark任务优化参数整理
  • Linux 之 RPM [Red - Hat Package Manager]【包管理】
  • [数据集][目标检测]肺炎检测数据集VOC+YOLO格式4983张2类别
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • bootstrap创建登录注册页面
  • ComponentOne 2017 V2版本正式发布
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • JavaScript设计模式之工厂模式
  • java概述
  • JS+CSS实现数字滚动
  • MySQL主从复制读写分离及奇怪的问题
  • ng6--错误信息小结(持续更新)
  • Python学习笔记 字符串拼接
  • 扑朔迷离的属性和特性【彻底弄清】
  • 强力优化Rancher k8s中国区的使用体验
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我感觉这是史上最牛的防sql注入方法类
  • 函数计算新功能-----支持C#函数
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (Java数据结构)ArrayList
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (六)Hibernate的二级缓存
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (十三)Flask之特殊装饰器详解
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)RocketMQ初步认识
  • (一)为什么要选择C++
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ./configure、make、make install 命令
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET NPOI导出Excel详解
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 中的轻量级线程安全