org.slf4j.Logger无法输出日志的BUG

2023-05-16

场景

依赖

 <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
。。。

代码

public class ApiTest {

    private final Logger logger = LoggerFactory.getLogger(ApiTest.class);

    @Test
    public void test(){
        logger.info("Lasse到此一游");
    }
}

不尽人意的结果:没有任何输出

网上找了一堆文章都无法解决,最后只能自己手撕源码了。

问题点

方法:org.slf4j.LoggerFactory.getILoggerFactory();

找错思路

可以看到我明明导入了logback-classic依赖,它却使用了slf4j-log4j12

又在网上搜索了找了一下有没有指定使用特定依赖包下的StaticLoggerBinder,结果无。

又想到是否根据依赖导入的顺序,当机立断去看哪个依赖导入了slf4j-log4j12

最后找到了是org.apache.zookeeper引用了slf4j-log4j12

解决方法

LoggerFactory是根据加载顺序指定使用哪个依赖下的StaticLoggerBinder的。

所以调整依赖的顺序。

将logback-classic顺序放到依赖的最上方

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
        </dependency>

结果查看

使用理想中的依赖

方法:org.slf4j.LoggerFactory.getILoggerFactory();

可以看到它用到了logback-classic下的StaticLoggerBinder类

控制台输出

总结

今后除了关注依赖冲突版本冲突还有多加一项依赖的加载顺序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

org.slf4j.Logger无法输出日志的BUG 的相关文章

随机推荐

  • maven配置阿里镜像,解决IDEA配置maven恢复默认配置问题

    文章目录 1 三个IDEA配置说明2 拷贝与修改settings xml2 1 找到IDEA的mave配置文件settings xml位置2 2 拷贝IDEA的settings xml到 m2目录下2 3 打开settings xml xf
  • Android 获取ListView滚动距离方法

    今天想做个导航栏渐变的效果 xff0c 原来这种效果是通过监听ScrollView的滚动距离实现的 由于首页图片较多 xff0c 而且里面还嵌套了ListView xff0c 大家都知道ListView嵌套在ScrollView中是需要计算
  • Linux如何开启远程连接

    第一步 打开终端 第二步 安装 OpenSSH server 输入以下命令 sudo apt update sudo apt upgrade sudo apt install openssh server 第三步 启用并验证ssh服务正在运
  • 完全平方数(C语言)

    一个简单的完全平方数问题 include lt math h gt math库 include lt stdio h gt int main long int i x y z for i 61 1 i lt 100000 i 43 43 x
  • 十进制转化为八进制和十六进制

    用C语言可以轻松的把10进制转化为8进制或16进制 include lt stdio h gt int main void int m printf 34 输入你想要转化的十进制整数 34 scanf 34 d 34 amp m print
  • Python处理大量csv(Excel)文件将数据保留两位小数

    Python处理大量csv文件是十分方便的 xff0c Python有许多用于数据处理数据分析的库 用Excel处理csv文件很痛苦 xff0c 效率很低 xff0c 没法批量保留两位小数 在处理需要大量数据的机器学习和神经网络的csv文件
  • BMI(体重指数)计算C语言

    计算BMI需要计算BMI的公式 xff0c 需要与用户交互 用户要输入体重和身高 include lt stdio h gt int main void BMI计算公式 float weight float height float BMI
  • SQL插入数据

    插入完整的行简单的一种方法 这种语法很简单 xff0c 但是避免使用 依赖列的定义次序 xff0c 在结构变动后不安全 INSERT INTO Customers INTO关键字保证代码可移植 VALUES 100000006 与列的定义次
  • 用栈实现中缀表达式求值

    include lt stdio h gt include lt string h gt include lt stdlib h gt define MAX 100 define Error 0 define True 1 typedef
  • 循环打印九九乘法表

    下面为三种打印九九乘法表的方法 第一种是使用while循环 xff0c 第二种是使用for循环 xff0c 第三种是使用while和for循环 其实还有很多种实现方式 xff0c 但是核心是利用循环实现 while循环实现九九乘法表 i 6
  • Python猜单词小程序

    import random flag 61 39 Y 39 print 34 欢迎使用猜单词小程序 34 while flag 61 61 39 Y 39 and flag 61 39 N 39 WORDS 61 39 easy 39 39
  • 扑克牌Python实现

    扑克牌可以洗牌 扑克牌有花色和数字 四个人的版本 每个人13张牌 对牌可以实现自动排序 xff08 先按照花色 xff0c 再按照数字 xff09 import random def gen pocker n 34 34 34 生成初始扑克
  • linux下执行sh脚本,提示Command not found解决办法

    确保用户对文件有读写及执行权限 xff08 如果此时的权限是 dr xff0c 没有x xff0c 就说明没有执行的权限 xff09 xff1a chmod a 43 x xxx sh
  • Python猜单词小游戏(GUI代码实现)

    本代码实现了带有用户界面的猜单词小游戏 xff0c 使用类进行编程 xff0c 用到了tkinter random等库 主界面可以进行猜单词游戏 xff0c 包含提示功能 更新单词 提交 退出等功能 菜单界面可以实现导入词库 xff0c 显
  • 伪黑客Windows下常使用的小黑窗口cmd,以及DOS(磁盘操作系统)

    什么是DOS xff1f 简单的来说 xff0c 就是使用命令的方式来操作电脑磁盘的文件 xff08 现在基本上都被图形化界面操作的方式取代 xff09 xff0c 如增删改查等操作 xff0c 是比较久远的一种操作系统 xff08 感兴趣
  • 【归并排序】C++数据结构实现归并排序完整代码

    归并排序 C 43 43 数据结构实现归并排序完整代码 归并排序 xff08 Merging Sort xff09 定义 xff1a 把两个或者多个有序的序列合并为一个 递归调用方式实现方式实现代码 xff1a 一 归并排序函数入口 归并排
  • 【css提取数据】

    css提取数据 一 了解网页代码格式二 标签之间的关系1 引入库 三 css选择器1 了解解析对象 xff0c 导入相关模块2 标签选择器3 类选择器4 id选择器5 组合选择器6 伪类选择器7 属性提取器 总结 提取数据方法有很多 xff
  • ubuntu 18.04 安装pycharm社区版以及创建桌面快捷方式

    1 下载 Download PyCharm Python IDE for Professional Developers by JetBrains 2 解压提取到此处 3 安装 xff08 1 xff09 打开终端 xff0c 进入pych
  • docker各种报错解决

    目录 问题1 Get https registry 1 docker io v2 context deadline exceeded 解决方法 问题反思 问题2 Error response from daemon Get 34 https
  • org.slf4j.Logger无法输出日志的BUG

    场景 依赖 lt dependency gt lt groupId gt org apache zookeeper lt groupId gt lt artifactId gt zookeeper lt artifactId gt lt v