日志相关知识梳理

概述

日志我们工作当中经常使用,我还没真心认真梳理过其中的知识,感觉比较惭愧今天把这个相关知识梳理下,下一篇写一下spring5日志的改造,如果不提前梳理下我感觉很难把spring5和spring4日志不同之处说明白

日志对于编程人员来说应该是十分重要的僚机了
当下比较流行的几款日志框架分别是JCL, Slf4j,jboss-logging,log4j,log4j2,logback和JUL。我靠这么多框架,应该还有我没举例出来的;

这些其中有些是日志实现框架有些是日志门面:

门面: JCL,slf4j,jboos-logging
实现: log4j,logback, log4j2,JUL

在这里插入图片描述

说下其中:这几个框架的历史:
slf4j, log4j,logback 这三个的作者是同一个人ceki, log4j作者认为太烂不再推荐使用,自己又写了一个logback

log4j2 这个是apache 实现的

JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging"。JCL采用了设计模式中的“适配器模式”,它对外提供统一的接口。大家一般选JCL,会用JCL+Log4J的组合方案,但是JCL出现的时候是为了服务大型项目,比较专业,也相对复杂一些。
jboss-logging也是同样的问题,不普适。
所以一般我们会选择Slf4j作日志门面。顺便说一下,Slf4j,JCL,Log4j,logback的作者是同一个人,非常了不起的大佬 ,cike。

对于日志实现的选择,log4j的作者说log4j太烂了,他已经不想去改了。
于是logback应运而生。哈哈,至于JUL,只能说太简陋了,不想用。
刚刚好,Slf4j和logback也是一对黄金搭档。

但是我再工作中经常使用slf4j+log4j2…log4j2设计的比较先进,效率比较高

JCL

在这里插入图片描述

<dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

在这里插入图片描述
可以直接打印

SLF4J

   <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.32</version>
        </dependency>

在这里插入图片描述

从上面可以看到只引用slf4j是不能打印日志的,因为slf4j是门面不包含实现框架,需要我们增加绑定器:
在这里插入图片描述
这官网给的一个逻辑图
在这里插入图片描述

使用jcl绑定器

 <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.32</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-jcl -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jcl</artifactId>
            <version>1.7.32</version>
        </dependency>

在这里插入图片描述

绑定器为啥可以打印我们看看其中的依赖关系:
在这里插入图片描述
由此可以看出slf4j-jcl依赖了commons-logging这个实现日志

绑定 logback

后面看logback的时候我们知道logback实现了slf4j标准,其实就不用这么一个搞法

<!--<dependency>-->
            <!--<groupId>ch.qos.logback</groupId>-->
            <!--<artifactId>logback-core</artifactId>-->
            <!--<version>1.2.5</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.5</version>
        </dependency>

上面的二选其一都可以
在这里插入图片描述
在这里插入图片描述

由此可见logback自身实现了slf4j标准

绑定log4j

 <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.32</version>
        </dependency>

在这里插入图片描述
在这里插入图片描述

这个是log4j没有实现slf4j的标准,是通过适配器模式实现的
适配器层面实现:

在这里插入图片描述

log4j2

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.13.3</version>
        </dependency>

由下图可以看出log4j-slf4j-impl 中直接依赖了slf4j(slf4j-api)
在这里插入图片描述

在这里插入图片描述
log4j2适配器层面代码实现
在这里插入图片描述

总结

在这里插入图片描述

slf4j 的桥接器如何使用

这种情况就是,我们调用的第三方jar中使用的是这种没有实现的jar,并且也没实现上slf4j标准我们如何操作
看这一篇
多应用中间的日志使用,log4j,log4j2,logback三个日志框架为例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值