slf4j依赖冲突处理

文章目录

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

使用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>
相关推荐
代码的余温1 小时前
Maven引入第三方JAR包实战指南
java·maven·jar
pianmian14 小时前
类(JavaBean类)和对象
java
我叫小白菜5 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
Albert Edison5 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍6 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122466 小时前
JAVA内存区域划分
java·开发语言·redis
勤奋的小王同学~6 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇7 小时前
JavaEE==网站开发
java·redis·java-ee
2401_826097627 小时前
JavaEE-Linux环境部署
java·linux·java-ee
缘来是庄7 小时前
设计模式之访问者模式
java·设计模式·访问者模式