SpringBoot日志

(一)认识日志

 认识日志:

  我们从最初学习计算机的时候就会使用printf打印日志了,通过日志我们可以打印出我们想要的数据,进一步学习我们可以学会了通过打印日志来发现和定位日志,或者根据日志来分析程序运行过程,在我们现在学习spring时也会根据控制台的日志来看我们的报错信息等

  我们现在来打印个日志看一下

 我们发现我们自己写的日志跟spring给我们打印出的日志简直是天差地别,我们打印出的日志好像并不能很好的满足我们的需求,这时候我们就需要学习spring的方式,使用专门的日志框架

  我们使用日志框架后发现确实跟spring打印出来的日志很相似了,那具体日志框架该怎么使用,具体参数是什么意思,我们等一会再讲,我们先来看一下日志有什么用

 日志用途:

    1.系统监控

  我们在以后工作的时候,我们不可能一直坐在电脑面前看着我们的程序执行,所以我们需要通过日志记录这个系统的运行状态,每一个方法的时间和状态,并且对数据分析,设置不同的规则,如果这个规则被打破,就要给我们示警,比如我们可以统计日志中关键字数量,如果数量过多,就要给我们示警

    2.数据采集

 我们可以通过日志来采集用户数据,采集的数据可以作用很多方面,比如数据统计,和推荐排序

   数据统计&推荐排序:我们在redis中set和zset那篇博客说集合可以帮我们统计pv,也就是用户的访客量,并且我们在推荐排序时也可以用zset来排序,而他们的数据。就可以从日志中获取

    3.日志审计

  随着互联网发展,互联网的安全越来越受到关注,系统安全也是项目中很重要的环节,所以我们国家发布法规,我们需要通过系统日志的分析,能判断出一些非法攻击和非法调用,以及系统处理过程中的安全隐患。(比如谁对数据进行了修改,我们要能找到是谁操作的)

(二)日志使用

  1)打印日志

我们springboot内置了日志框架slf4j,所以我们也可以在程序中调用slf4j来输出日志

打印日志的步骤:1.在程序中得到日志对象   2.使用日志对象输出要打印的内容

1.获取日志对象

 我们在getLooger中要传递一个参数,来表示这个日志的名称,这样可以更清晰知道是哪个类输出的日志,如果出错更方便我们找到错误类

 同时注意

这是我们需要导的包,之前我导入错了包,导致整个项目都跑不起来

2.使用日志对象打印日志

我们可以看到我们在info中输入的内容,在右下角被打印了出来

  2)日志框架的介绍

  我们说spring使用了slf4j框架,但是整个框架也不是一个真正的日志实现,而是一个抽象层,他对现有的一些日志框架制定了一种规范标准,也就是slf4j就是个接口,所以slf4j,需要和具体的日志框架配合使用

   1.门面模式

   定义:门面模式又称为外观模式,他提供了统一的接口,用来访问子系统中的一群接口,其主要特征是定义了⼀个⾼层接⼝,让⼦系统更容易使⽤.

   我个人看来,这个就类似于封装,我们这个高层接口封装了子系统的功能,我们通过调用高层接口来访问子系统的功能

  门面模式主要有两种角色:

  1.外观角色(也就是我们的高层接口):也称门面角色,系统对外的统一接口

  2.子系统角色:我们可以同时拥有一个或多个子系统角色,每个又不是一个单独的类,只是一个类的集合,而我们子系统并不知道门面角色,对于子系统角色。门面角色就只是一个客户端而已

门面模式的优点:

   1.实现了客户端与子系统的解耦合,这就让子系统的变化不会影响到调用它的客户端

   2.提高了灵活性,我们客户端不关心子系统的实现方式与接口,只关心与门面对象的交互

2.slf4j框架介绍

  slf4j就是其他日志框架的门面,可以理解为提供日志服务的统一API接口,并不涉及到具体日志逻辑实现

   如果我们不引入日志门面,我们上面的图上说,我们slf4j是log4j,logback,jul的接口,如果一个项目使用了log4j,但是我们依赖的另一个库,如果这个库依赖于另一个日志框架,我们还要加载另一个日志框架。

如果这样的话,就会导致我们要引入多个配置文件,使用多个api接口,那么就代表我们要维护多套配置文件,而且如果我们要更换日志框架,我们就需要修改代码,这对于我们程序员的工作量又是一个大提升

   如果我们引入日志门面,我们应用程序和日志框架就有了一个统一的api接口,此时我们应用程序只需要维护一套日志文件的配置,并且就算底层框架接口有所改变,我们的接口也不用改变

我们的slf4j就是这个日志门面

3)日志格式的说明

  

1.时间日期:我们这个日志是在什么时候打印的

2.日志级别:error,warn,info,bebug,trace

3.进程ID

4.线程名

5.logger(通常使用源代码类名,方便我们定位位置)

6.日志内容

4) 日志级别

 日志级别代表日志信息对应问题的严重性,是为了我们更快的筛选出重要信息的

 有了日志级别后,如果我们要筛选出error级别的日志信息,就可以在配置文件中更改

1.日志级别的分类

 日志级别由高到低依次为:fatal,error,warn,info,debug,trace

• FATAL:致命信息,表⽰需要⽴即被处理的系统级错误.

 • ERROR:错误信息,级别较⾼的错误⽇志信息,但仍然不影响系统的继续运⾏.

 • WARN:警告信息,不影响使⽤,但需要注意的问题

• INFO:普通信息,⽤于记录应⽤程序正常运⾏时的⼀些信息,例如系统启动完成、请求处理完成等. 

• DEBUG:调试信息,需要调试时候的关键信息打印. • TRACE:追踪信息,⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)

   我们这里要注意,日志级别也是开发人员设置,目的是给开发人员看的,所以我们日志级别是否合理,还是要看开发人员的理解,所以有可能我们全是error级别的日志,但是还是能正常运行

2.日志级别的使用

  

   我们调用了logger中所有日志级别的打印,我们发现没有fatal,因为springboot中默认框架是logback,logback中没有fatal级别,所以可以用error来映射到,而且一旦出现fatal,就说明是有严重的错误了,我们也不需要打印日志了

  但是我们打印出来发现,只有info,warn,error级别的日志,这是因为我们日志的默认输出级别是info,所以只输出大于等于这个级别的日志

5)日志配置

 1.配置日志级别

 日志级别配置只需要在配置文件中设置logging.level配置项就可以

这样我们默认的日志级别就是debug

 2.日志持久化

  我们上述的日志都是在控制台上的,但是我们工作在线上环境中,我们就需要把日志保存,以便出现问题时,发现问题,把日志保存下来就叫持久化。

   

这里我们用yml配置,后面可以跟绝对路径或者相对路径

我们也可以使用

这样会在我们设置的路径下创建一个日志文件

如果我们这两个都进行配置了,我们会以logging.file.name为主

3.配置日志文件分隔

  我们日志文件是很多的,如果都放在一个文件中,不仅会导致文件过大,也不方便我们观察,所以日志框架给我们提供了一个功能,就是日志文件到一定大小就会进行分割,如果日志文件超过10M就自动进行分隔,当然这个大小我们是可以调节的

 

  日志文件超过1kb分隔,这里是为了方便展示,一般我们是不会分这么小的,分隔后端日志文件名为:日志名.日期.索引

4.配置日志格式

  目前日志打印的格式默认的,但是也是支持我们手动配置的

  我们发现为什么我们这里设置了颜色但是却没有生效,这个需要我们手动改一下配置,让idea支持控制台颜色显示

并且输出

这样就可以让我们的控制台显示颜色了

(三)使用注解让日志输出

  我们发现我们每次输出都要使用getLogger很麻烦,并且每个类都要添加一边,Lombok给我们提供了一种更简单的方式

 1.添加lombok框架支持

 2.@slf4j注解

 然后我们直接调用info方法就可以打印日志了

  那我们可能会好奇这个log是哪来的,这就是我们@slf4j这个注解给我们提供的一个日志对象,我们反编译一下看看

  我们发现确实是这样,而且跟我们自己写的logger简直一模一样

(四)总结

  日志是我们不可缺少的,使用日志可以快速发现和定位问题,springboot给我们集成了日志框架slf4j,然后spring日志框架内部是使用logback,默认情况下我们讲info级别以上的日志输出到控制台,我们可以通关@slf4j注解和log对象快速打印自定义日志

 我们可以通过更改配置文件,更改默认日志级别,使日志持久化,更改配置日志的打印格式等

 

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值