日志冲突怎么解决?slf4j和log4j的区别?看完这一篇,这些都是小意思啦
创始人
2024-01-20 21:17:28
0

文章目录

      • 一.你的烦恼
      • 二.前置知识介绍
      • 三.说一说让你头大的各种日志依赖
        • 1.Slf4j的核心依赖
        • 2.log4j的jar包依赖
        • 3.slf4j对于log4j的桥接包的依赖
        • 4.log4j对于slf4j的逆转包
      • 四.再举一些常见小例子
        • 使用slf4j作为门面,log4j作为实现需要引入的依赖
        • 使用slf4j作为门面,logback作为实现需要引入的依赖
        • 保持项目原有log4j引用不变,将输出统一成slf4j作为门面,logback作为实现需要引入的依赖
      • 五.小总结

一.你的烦恼

相信很多小伙伴在工作或开发中都会或多或少遇到日志冲突的问题,比如:

   代码中明明打印了日志但是却没有出现?
   日志文件中有打日志?但是控制台没有?
   因为日志冲突,项目直接启动报错?
在这里插入图片描述
此时你的心里可能会奔腾一些词语出来
   最可能的原因就是我们的项目引入了很多的第三方依赖,中间件,他们使用不同的日志框架,导致项目日志冲突

二.前置知识介绍

首先要引入一些必备的前置知识.

  1. Slf4j:simple log facade for java,其实就是一个日志规范,可以当做接口来理解,并没有打印日志的具体实现.
  2. log4j: Log for java,具体的打印日志实现,一个日志框架
  3. 那我直接用log4j行不行?为什么项目中有那么多Slf4j?
    直接使用log4j也是可以的,但是建议调用slf4j接口的日志方法统一打印日志,因为它就是一个规范,可以忽略打印日志的具体实现方法.就像Java中的接口一样.这样,即使我们的系统换了一个日志源,比如说Logback,也不需要我们去更改代码。这样我们就达到了降低日志和项目之间的耦合度的目的。

所以,一般都推荐使用 日志规范+实现框架 去打印, 在打印日志的时候调用日志规范中的接口方法,这样即使实现框架需要切换,改动也很小.

  1. 目前还有哪些流行的日志规范/门面,日志实现框架呢?
    在这里插入图片描述
  2. 目前最主流的日志打印方案是什么?
    最主流的是 slf4j+logback/log4j2

三.说一说让你头大的各种日志依赖

知道了一些必备的理论知识,现在来讲一讲日志依赖,因为真的种类太多了,又不知道引入有什么作用,就太难受了.

1.Slf4j的核心依赖

就是单纯引入Slf4j的api方法

 org.slf4jslf4j-api

2.log4j的jar包依赖

		log4jlog4j

3.slf4j对于log4j的桥接包的依赖

org.slf4jslf4j-log4j12

slf4j-log4j12就是桥接器,为什么要有这个包呢?其实是因为slf4j和log4j并不兼容,需要在slf4j和log4j之间进行过渡和封装,只有引入了这个包,才能利用slf4j的接口调用log4j的实现

除了这个桥接包,还有很多的slf4j的桥接包,这里小总结一下,作用和slf4j-log4j12的都差不多.
在这里插入图片描述
其中针对于于logback日志框架时,并没有针对的桥接器,这是因为logback与slf4j是一个作者所写,在logback中直接实现了slf4j的SPI机制。

4.log4j对于slf4j的逆转包

       org.slf4jlog4j-over-slf4j

这个逆转包可以使原来log4j的代码保持不变,使用slf4j接口进行输出.
举个例子:
     有一些老项目中有可能直接使用log4j进行日志输出,现在我们想优化这个项目,将其改为slf4j作为门面,logback作为具体实现去输出日志, 那我们就可以引入log4j-over-slf4j这个包,它可以让你在不修改原有log4j代码的情况下,统一全部使用logback的日志格式进行输出.因为它会把原来log4j的输出转换成使用slf4j接口进行输出.

除了这个逆转包,还有其他一些常用的逆转包,如下:
在这里插入图片描述

四.再举一些常见小例子

使用slf4j作为门面,log4j作为实现需要引入的依赖

正常应该需要引入以下三个依赖

 org.slf4jslf4j-api1.7.30log4jlog4j1.2.17org.slf4jslf4j-log4j121.7.30

但是slf4j-log4j12依赖会自动引入其他两个包,所以,我们只需要单独引入这个包就可以达到效果

     org.slf4jslf4j-log4j121.7.30

还需要注意要加上对应的配置文件,否则要报错
在这里插入图片描述

使用slf4j作为门面,logback作为实现需要引入的依赖

只需要引入logback的依赖即可,它不需要桥接包

        ch.qos.logbacklogback-classic1.2.11

保持项目原有log4j引用不变,将输出统一成slf4j作为门面,logback作为实现需要引入的依赖

       org.slf4jlog4j-over-slf4j1.7.25ch.qos.logbacklogback-classic1.2.11

五.小总结

   日志冲突主要分为两个方面,一个是有明显的错误日志,控制台可以看到,这个时候首先要明白报错信息想表达的是什么意思,根据提示去进行优化,第二种是没有明显的错误日志,但是有些日志没有正常打印,这个时候就需要主动去排除依赖,查看是哪里冲突.

其实最主要的思想就是:
删除不必要的日志依赖
统一项目的日志门面/规范和实现

这里引用一个他人总结的依赖转换图.可以参考
在这里插入图片描述

今天的分享就到这里了,有问题可以在评论区留言,均会及时回复呀.
我是bling,未来不会太差,只要我们不要太懒就行, 咱们下期见.
在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...