【SpringBoot】深入解析日志框架及日志使用:日志框架门面 SLF4J 介绍和使用 Logger 类及日志工厂 LoggerFactory 打印日志及日志格式、日志级别分类、和日志级别使用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


日志框架介绍


在这里插入图片描述


分别对应下图中除 commoms-logging 外的四个日志框架:

在这里插入图片描述

SLF4J不同于其他日志框架,它不是一个真正的日志实现,而是一个抽象层,对日志框架制定的一种规范、标准、接口

所有SLF4J不能独立使用,需要和具体的日志框架配合使用


SLF4J 框架


SLF4J就是其他日志框架门面

SLF4J可以理解为是提供日志服务统一 API 接口,并不涉及到具体的日志逻辑实现


不引入日志门面


常见的日志框架有log4J, logback等。

如果一个项目已经使用了log4j,而你依赖的另一个类库:

  • 假如是Apache Active MQ,它依赖于另外一个日志框架logback,那么你就需要把logback也加载进去。

在这里插入图片描述


存在问题:

  1. 不同日志框架API接口配置文件不同,如果多个日志框架共存,那么不得不维护多套配置文件(这个配置文件是用户自定义的配置文件)。
  2. 如果要更换日志框架应用程序将不得不修改代码,并且修改过程中可能会存在一些代码冲突
  3. 如果引入的第三方框架,使用了多套,那就不得不维护多套配置

引入日志门面


引入门面日志框架之后,应用程序日志框架(框架的具体实现)之间有了统一的API接口(门面日志框架实现);

此时应用程序只需要维护一套日志文件配置,且当底层实现框架改变时,也不需要更改应用程序代码

在这里插入图片描述

SLF4J就是这个日志门面

总的来说,SLF4J使你的代码独立于任何一个特定的 日志API,这是一个对于开发 API 的开发者很好的思路。


日志使用


Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:

在这里插入图片描述


它打印的日志和System.out.print有什么不同呢?

比如,我们通过打印时间日志,观察程序运行消耗时间:

在这里插入图片描述


重新运行程序,去页面中多点击几次验证码图片:

在这里插入图片描述


在这里插入图片描述


回到后端,观察打印日志:

在这里插入图片描述

可以看到,我们通过System.out.print打印的日志,比SpringBoot打印的日志缺少了很多信息。


SpringBoot内置了日志框架Slf4j,我们可以直接在程序中调用Slf4j来输出日志。

在这里插入图片描述


打印日志


打印日志的步骤:

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

在程序中得到日志对象


我们先来重新创建一个项目:

在这里插入图片描述


在程序中获取日志对象需要使用日志工厂 LoggerFactory,如下代码所示:

private static Logger logger = LoggerFactory.getLogger(LogController.class);
  • LoggerFactory.getLogger 需要传递一个参数,标识这个日志的名称。
  • 这样可以更清晰的知道是哪个类输出的日志;当有问题时,可以更方便直观的定位到问题类。
  • static 也可以不加,按照需求来添加 static ,final 等;

注意:Logger 对象是属于org.slf4j包下的,不要导入错包。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


此时,我们就定义好了一个日志对象:

在这里插入图片描述


使用日志对象打印日志


日志对象的打印方法有很多种,我们可以先使用info()方法来输出日志,如下代码所示:

在这里插入图片描述


重新运行程序,访问页面 http://127.0.0.1:8080/log/print,打印日志效果展示:

在这里插入图片描述


日志格式的说明


打印的日志分别代表什么呢?

在这里插入图片描述


日志级别的分类


日志的级别从高到低依次为:FATALERRORWARNINFODEBUGTRACE

  • FATAL
    • 致命信息,表示需要立即被处理的系统级错误。
  • ERROR
    • 错误信息,级别较高的错误日志信息,但仍然不影响系统的继续运行。
  • WARN
    • 警告信息,不影响使用,但需要注意的问题。
  • INFO
    • 普通信息,用于记录应用程序正常运行时的一些信息,例如系统启动完成、请求处理完成等。
  • DEBUG
    • 调试信息,需要调试时候的关键信息打印。
  • TRACE
    • 追踪信息,比 DEBUG 更细粒度的信息事件(除非有特殊用途,否则请使用DEBUG级别替代)。
  • 日志级别通常和测试人员的Bug级别没有关系。
  • 日志级别是开发人员设置的,用来给开发人员看的。
  • 日志级别的正确设置,也与开发人员的工作经验有关。
  • 如果开发人员把 error 级别的日志设置成了info,就很有可能会影响开发人员对项目运行情况的判断。
  • 出现error级别的日志信息较多时,可能也没有任何问题。
  • 测试的bug级别更多是依据现象和影响范围来判断

日志级别的顺序


在这里插入图片描述

级别越高,收到的消息越少


日志级别的使用


日志级别是开发人员自己设置的。开发人员根据自己的理解来判断该信息的重要程度

类似公司管理,通常由领导来判断什么样的事情需要汇报,什么样的事情不需要汇报。

针对这些级别,Logger对象分别提供了对应的方法,来输出日志:

在这里插入图片描述

观察打印的日志结果,结果发现,只打印了infowarnerror 级别的日志,这与日志级别的配置有关,日志的输出级别默认是info级别,所以只会打印大于等于此级别的日志,也就是infowarnerror

  • SpringBoot 默认的日志框架是LogbackLogback没有FATAL级别,它被映射到ERROR
  • 出现fatal日志,表示服务已经出现了某种程度的不可用,需要系统管理员紧急介入处理。
  • 通常情况下,一个进程生命周期中应该最多只有一次FATAL记录

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值