当前位置: 首页 > 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>

http://www.mrgr.cn/news/25289.html

相关文章:

  • NX1872三维电气布线
  • Linux进程(2)(进程状态 - 僵尸、孤儿进程)
  • 获取STM32 MCU的唯一ID
  • 无人机飞行时状态详解!!!
  • 防逆流开关跳闸解决方案|自发自用余电不上网防逆流控制解决方案|微电网防逆流控制器解决方案
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • 计算机操作系统之并行性与并发性笔记
  • 深度学习——基础知识
  • 金色传说:SAP-SD-VA01增强:创建销售订单时检查行项目长文本必输增强
  • 激光超声成像
  • [网络]TCP/IP协议 之 数据链路层和DNS
  • 国产(DM8)达梦数据库安装教程Windows
  • python 面向对象(进阶篇)详解!
  • 如何打造一款成功的游戏
  • spring boot设置多环境的配置文件
  • GORM中常见的“reflect: reflect.Value.Set using unaddressable value“错误及解决方案
  • Nginx解决跨域问题
  • JSON对接发送短信验证码怎么获取状态报告
  • 基于Python的可视化在线学习系统
  • 如何进行IP清洗