JavaEE & SpringSpringBoot 日志

SpringBoot 日志

  • 1. 日志概述
  • 2. 日志使用
    • 2.1 打印?志
      • 2.1.1 在程序中得到?志对象
      • 2.1.2 使??志对象打印?志
    • 2.2 ?志框架介绍
      • 2.2.1 ??模式(外观模式)
      • 2.2.2 SLF4J 框架介绍
    • 2.3 ?志格式的说明
    • 2.4 ?志级别
      • 2.4.1 ?志级别的分类
      • 2.4.2 ?志级别的使?
    • 2.5 ?志配置
      • 2.5.1 配置?志级别
      • 2.5.2 ?志持久化
      • 2.5.3 配置?志?件分割
      • 2.5.4 配置?志格式
  • 3. 更简单的?志输出
    • 3.1 添加 lombok 依赖
    • 3.2 输出?志
  • 4. 总结

1. 日志概述

为什么要学习日志

  • 对于平常来说, 我们就在使? System.out.print 来打印?志了
  • 随着项?的复杂度提升, 我们对?志的打印也有了更?的需求, ?不仅仅是定位排查问题.
  • 有时候我们需要将日志持久化, 进行对应的数据分析, 但是 System.out.print 不能很好的满?我们的需求, 我们就需要使??些专??志框架(专业的事情交给专业的?去做).

日志的用途
通过前?的学习, 我们知道?志主要是为了发现问题, 分析问题, 定位问题的, 但除此之外, ?志还有很多?途

  1. 系统监控
  2. 数据采集
  3. ?志审计

2. 日志使用

Spring Boot 项?在启动的时候默认就有?志输出,如下图所?:
在这里插入图片描述
SpringBoot 内置了?志框架 Slf4j , 我们可以直接在程序中调? Slf4j 来输出?志

2.1 打印?志

打印?志的步骤:

  • 在程序中得到?志对象.
  • 使??志对象输出要打印的内容.

2.1.1 在程序中得到?志对象

在程序中获取?志对象需要使??志?? LoggerFactory,如下代码所?:

private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

LoggerFactory.getLogger 需要传递?个参数, 标识这个?志的名称. 这样可以更清晰的知道是哪个类输出的?志. 当有问题时, 可以更?便直观的定位到问题类

注意:Logger 对象是属于 org.slf4j 包下的, 不要导?错包.
在这里插入图片描述

2.1.2 使??志对象打印?志

?志对象的打印?法有很多种,我们可以先使? info() ?法来输出?志,如下代码所?:
在这里插入图片描述
在这里插入图片描述

2.2 ?志框架介绍

在这里插入图片描述

2.2.1 ??模式(外观模式)

SLF4J是??模式的典型应?(但不仅仅使?了??模式).

??模式定义
门面模式又称为外观模式, 提供了一个统一接口, 用来访问子系统中的一群接口, 其主要特征是定义了一个高层接口, 让子系统更容易使用.在这里插入图片描述
??模式主要包含2种??:

  • 外观??(Facade): 也称????,系统对外的统?接?.
  • ?系统??(SubSystem): 可以同时有?个或多个 SubSystem. 每个 SubSytem 都不是?个单独的类,?是?个类的集合. SubSystem 并不知道 Facade 的存在, 对于 SubSystem ??, Facade 只是另?个客?端?已(即 Facade 对 SubSystem 透明)

??模式的实现

场景: 回家, 我们会开各个屋的灯. 离开家时, 会关闭各个屋的灯

如果家?设置?个总开关, 来控制整个屋的灯就会很?便

我们使???模式的实现
在这里插入图片描述
??模式的优点

  • 减少了系统的相互依赖. 实现了客户端与子系统的耦合关系, 这使得子系统的变化不会影响到调用它的客户端;
  • 提高了灵活性, 简化了客户端对子系统的使用难度, 客户端无需关心子系统的具体实现方式, 而需要和门面对象交互即可.
  • 提高了安全性, 可以灵活设定访问权限, 不在门面对象中开通方法, 就无法访问

2.2.2 SLF4J 框架介绍

SLF4J 就是其他?志框架的??. SLF4J 可以理解为是提供?志服务的统?API接?, 并不涉及到具体的?志逻辑实现.
不引??志??
在这里插入图片描述
引??志??
在这里插入图片描述
总的来说,SLF4J使你的代码独?于任意?个特定的?志API,这是?个对于开发API的开发者很好的思想.

2.3 ?志格式的说明

在这里插入图片描述
从上图可以看到,?志输出内容元素具体如下:

  1. 时间?期:精确到毫秒
  2. ?志级别:ERROR, WARN, INFO, DEBUG 或TRACE
  3. 进程ID
  4. 线程名
  5. Logger名(通常使?源代码的类名)
  6. ?志内容

2.4 ?志级别

?志级别代表着?志信息对应问题的严重性, 为了更快的筛选符合?标的?志信息.

2.4.1 ?志级别的分类

?志的级别从?到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE在这里插入图片描述
在这里插入图片描述

2.4.2 ?志级别的使?

?志级别是开发?员??设置的. 开发?员根据??的理解来判断该信息的重要程度在这里插入图片描述

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

观察打印的?志结果:
在这里插入图片描述
结果发现, 只打印了info, warn和error级别的?志

这与?志级别的配置有关, ?志的输出级别默认是 info级别, 所以只会打印?于等于此级别的?志, 也就是info, warn和error.

2.5 ?志配置

上述是?志的使?, ?志框架?持我们更灵活的输出?志, 包括内容, 格式等.

2.5.1 配置?志级别

?志级别配置只需要在配置?件中设置"logging.level"配置项即可,如下所?:在这里插入图片描述
在这里插入图片描述

2.5.2 ?志持久化

以上的?志都是输出在控制台上的, 然?在线上环境中, 我们需要把?志保存下来, 以便出现问题之后追溯问题. 把?志保存下来就叫持久化.

?志持久化有两种?式

  1. 配置?志?件名
  2. 配置?志的存储?录

在这里插入图片描述
配置?志?件的路径和?件名:
在这里插入图片描述

后?可以跟绝对路径或者相对路径

运?结果显?, ?志内容保存在了对应的?录下在这里插入图片描述
注意:
logging.file.namelogging.file.path 两个都配置的情况下, 只?效其?, 以
logging.file.name 为准.

2.5.3 配置?志?件分割

如果我们的?志都放在?个?件中, 随着项?的运?, ?志?件会越来越?, 需要对?志?件进?分割.

当然, ?志框架也帮我们考虑到了这?点, 所以如果不进?配置, 就??动配置
默认?志?件超过10M就进?分割

在这里插入图片描述

配置?志?件分割:
在这里插入图片描述

  1. ?志?件超过1KB就分割(设置1KB是为了更好展?. 企业开发通常设置为200M, 500M等, 此处没有明确标准)
  2. 分割后的?志?件名为: ?志名.?期.索引

项?运?, 多打印?些?志, ?志分割结果:
在这里插入图片描述

2.5.4 配置?志格式

?前?志打印的格式是默认的在这里插入图片描述

3. 更简单的?志输出

每次都使? LoggerFactory.getLogger(xxx.class) 很繁琐, 且每个类都添加?遍, lombok给我们提供了?种更简单的?式.

  1. 添加 lombok 框架?持
  2. 使? @Slf4j 注解输出?志。

3.1 添加 lombok 依赖

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

3.2 输出?志

在这里插入图片描述

4. 总结

  1. ?志是程序中的重要组成部分,使??志可以快速的发现和定位问题,Spring Boot 内容了?志框架,默认情况下使?的是 info ?志级别将?志输出到控制台的,我们可以通过 lombok 提供的@Slf4j 注解和 log 对象快速的打印?定义?志.
  2. ?志包含 6 个级别, ?志级别越?,收到的?志信息也就越少,我们可以通过配置?志的保存名称或保存?录来将?志持久化.