00:00
好,接下来呢,我们来学习第三章spring boot与日志,那么说这个日志之前呢,我们先通过一个小小的故事给大家介绍一下日志的起源,以及日志框架的一些关系,但如果说有同学对这一块也非常清楚了,那你就可以跳过我这个精彩的故事了。好,来说一下假设呢,现在呢,有一个开发人员小张是吧?小张呢,是一个每天晚上哎,加班到两点,勤勤恳恳的一位开发人员,然后呢,他再开发一个比较大型系统。开发一个大型系统,这大型系统呢,由于这个系统有点大,他每次呢,啊为了这个调试或者测试方面,他呢都喜欢什么,System STEM out,这是大家老用的一个东西,System out print,他把一些关键数据呢,啊在控制台打印了一下,将关键数据打印在控制台。
01:06
看看看。然后呢,突然有一天,我们这个项目呢,开发完了,开发完了呢,我们这个老板跑过来说,哎呀,小张,你这个代码里边这system out是不是有点太多了,你要它干嘛?你把它给我去掉吧,好,老板现在想要去掉它,那怎么办呢?那小张一行一行把它是不是注释掉了,然后小张刚注释完,老板又说,我觉得你这个你这个输出得还不错,让我们能通过你这个控制台输出了解你这个项目的运行状况,那怎么着啊,那我们又打开,那老板说你这个输出既然这么不错,你就不如把它给我写在一个文件里边,也方便我后来监控一下。那小张又得改这段记录的代码了,小张说,哎呀,算了,这么麻烦咋搞啊,我自己来写一个框架。
02:05
我们来记录,记录系统的一些信息,一些运行时的一些信息。那么这个时候呢,我们这个日志框架小张就写出来了日志框架,哎,小张呢,高高兴兴的写了一个日志框架,叫张log是吧,张log这个日志框架呢,表现的还不错,他呢以后呢就都要用这个日志框架,他对这个日志框架很满意,结果呢,突然随着时代在进步,他觉得这个日志框架功能是不是有点简陋啊,然后呢,他突然想出了一些高大上的功能,诶比如呢,他想在日志输出的时候想要过滤,哎,那么高大上的几个功能,他想出了几个高大上的功能,比如呢,以前日志记录的时候,不管怎么输出,它都是阻塞的,它想启用异步模式,日异步记录和收集日志,包括呢,他还想要自动归档,就说呢,比如我们每天的日志呢,我都给你压缩起来。
03:16
我放在一个文件里边,我一天,然后来分类,我每天要自动归档等等等等等,他想到了一大堆天马行空的功能,然后你还别说小张这个技术啊,还是贼厉害是吧,然后呢,他把这个功能还给实现出来了,他叫小张good,这个日志框架确实不错,只不过呢,小张现在面临的问题又来了。什么问题呢?他写了一个新的日志框架里面的API呢,或者一些设计可能呢,跟以前的框架有点不一样了,那怎么办啊,我把以前的框架呢卸下,将以前框架。框架卸下,卸下来下来以后呢,换上新的框架,换上新的框架以后呢,他还要重新修改API,修改之前相关的API。
04:13
API部分API呢,可能有了变动,哎,他呢要修改这个,小张觉得那我好,我写了一个小张good,我哪一天呢,我觉得我这个good也不行了,我写了一个框架叫小张perfect,一个完美的日志框架,那我每次都要做这个事,我们还要改代码,是不是有点麻烦,小张突然想到了一种模式。想到了JBBC跟数据库驱动的关系,小张说,哎呀,我们现在来写数据库,我们都面向接口编程,然后呢,我们只需要把数据库的实现放进去就行了,这就是我们数据库的驱动。小张说,那我的这个日志框架为什么不这么设计呢?所以呢,小张为所有的日志框架来写了一个统一的咱们这个接口层,接口层那么呢,我们把它呢,暂且就叫日志门面。
05:13
这个日志里面,也就是我们这个日志的抽象层,大家不管用什么日志框架,你都用过这个日志抽象层,我们就叫log。比如。我们这呢,有一个抽象层的这个炸包以后呢,我们来进行编码的时候,我们都只面向它来进行编程,我们调它里的这样的代码,而要用到哪个日志,要用小张的good还是perfect,我们呢可以来向项目中,诶项目中导入具体的日志实现就行了,哎,小张觉得这种设计哎确实已经非常好了,我们面向咱们这个统一接口层来开发,我要用什么就用日志实现就行了,就是说呢,我们这些炸包哎都是来实现的它我们之前的日志框架都是实现的实线啊,咱们这个抽象层。
06:26
来实现呢,我们这个日志抽象层的东西,那好小张这个想法啊,确实还是不错的,那么所以说呢,我就来接下来介绍上我们这个市面上的日志框架,市面上的日志框架大大小小非常多,我们来列举上我们非常多常见的什么J。怎么接C接boss?斯log,还有大家听过的什么log?
07:01
Log佛街,哎,包括呢,我们这个log佛图。落个for街图,包括呢,我们什么self for街,哎呀等等等等一大堆,我实在是举不完了我们这些常见的框架,但是他们呢,确实比较常用的,那么来介绍一下这些框架,我们到底这么多框架,我们要用哪些,该怎么用呢?我们来先来捋一下他们的关系,哎,他们关系是这个样子的,我来把这个图复制一下。也就是说呢,我们这边是我们的日志门面,哎,日志门面就是我们说的日志的一个抽象层。抽象层,也就是说呢,我们右边呢,是日志的实现,那么按照理所应当,我们就是应该在左边左边选一个门面。
08:04
选一个门面,也就是呢,我们这个抽象层,抽象层来自左边来选一个接口,来右边来选一个实线。来选一个实线。就行了,好,也就说呢,哪些是门面呢?我们这个JCL就叫,哎什么贾塔,这就是我们阿奇公司,我们的这个斯这个包,我们spring框架也一直在,为什么叫GCL不叫CL,就是因为是这个小组来开发的,那么帕旗下的一个小组,还有一个呢,叫S,叫simple log for Java,就说呢,简单的这个日志门面给Java来做的这个东西,还有一个叫jbos罗,那么这三个东西他他和他都属于日志门面,而剩下呢,这几个,比如我们这个log放街啊,大名鼎鼎的log放街,包括呢,我们这个JUL,就是我们这个Java u工具包里边带的这个日志,包括log街to,那这个log街的一个重大升级,还有咱们这个log bank啊,这些呢,都是日志实现。
09:18
那按照我们这个想法,从左边抽一个,从右边抽一个,我们来用就行了,那抽哪个呢?哎,我们不知道抽哪个,我们来先用排除法,我们从左边来,那要从左边来的话,我先来排除slogan。这个东西我感觉我们用的这个场景实在是太少了,比如他生来就不是给我们这些普通的来程序员我来用的,哎,包括呢,我再来搞一个叫GCM。这个j boss logo呢,一直都是一些特定的框架啊,在这在用,我们来看这个JCL,我这JCL呢,我也删掉,为什么我不用它这个杰CL最后一次更新是2014年更新的,只能赐他四个字,廉颇老矣,尚能范腐是吧,然后呢,那么剩下我们就理所应当要选这个self佛节了,所以说呢,我们就要日志门面。
10:19
来,我来选了,这个叫sell否?哎,我来选了它,而我们这个日志实现我选谁呢?日志实现来说一下,Log for街和log bank其实都是同一个人写的,哎,这个log街呢,当时写出来还挺不错的,只不过这个log街有性能问题,然后呢,这个人要对log佛间进行升级了,但是他觉得要对log佛街来做升级,可能是改动太大了,那他就重新写了一个框架叫log bank,那么他一想要又要新写框架了,就跟小张一样,那我未来要又要有更多的日志框架,咋办呢?他又写了一个日志门面,叫sell for街,所以说啊,这三个框架log for街,Log bank sell for街都是出自同一个人之手。
11:14
那么如果我选尔街,那理所应当就选log街或log,因为毕竟出自同一个人之手,适配性肯定是贼高的,所以说呢,我们来说一下,为啥我不选其他呢?Log间他没有log先进,所以说我不要他了。而Java u log,这是Java u工具包里边自带的一个这个log,他为啥要自带这个呢?就是因为当时log街一出来以后,哎,他害怕这个日志市场被人家占领了是吧,勉强的来加一个这个日志工具,所以说呢,我们肯定也不用它,然后这个log佛街兔呢,他其实是借了log佛街之名,是我们阿帕奇公司重新来做的一个日志框架,整个日志框架里边设计的也非常好,但是就由于太好了是吧,现在的好多框架还没适配起来,还没用起来,所以呢,我们最终选择log bank。
12:11
Log bank,然后呢,这是哎,这是我们的一个选择日志门面日志实现,那么spring BOO是怎么做的呢?Spring boot,因为它的这个底层是框架,而spring框架呢,默认使用的是默认使用我们这个了啊,它默认使用的是这个,而spring呢,然后呢,对他们进行了一个包装选用哎它。选用的也是节。SF街和咱们这个log bank,嗯,还是和我们一样机制,所以呢,我们来说这就是我们最终的选择和的选择,这就是我们在众多日志框架里边我们挑出的最终的选择,那他们到底怎么用,我们接下来继续解析。
我来说两句