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 不能很好的满?我们的需求, 我们就需要使??些专??志框架(专业的事情交给专业的?去做).
日志的用途
通过前?的学习, 我们知道?志主要是为了发现问题, 分析问题, 定位问题的, 但除此之外, ?志还有很多?途
- 系统监控
- 数据采集
- ?志审计
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 ?志格式的说明
从上图可以看到,?志输出内容元素具体如下:
- 时间?期:精确到毫秒
- ?志级别:ERROR, WARN, INFO, DEBUG 或TRACE
- 进程ID
- 线程名
- Logger名(通常使?源代码的类名)
- ?志内容
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 ?志持久化
以上的?志都是输出在控制台上的, 然?在线上环境中, 我们需要把?志保存下来, 以便出现问题之后追溯问题. 把?志保存下来就叫持久化.
?志持久化有两种?式
- 配置?志?件名
- 配置?志的存储?录
配置?志?件的路径和?件名:
后?可以跟绝对路径或者相对路径
运?结果显?, ?志内容保存在了对应的?录下
注意:
2.5.3 配置?志?件分割
如果我们的?志都放在?个?件中, 随着项?的运?, ?志?件会越来越?, 需要对?志?件进?分割.
当然, ?志框架也帮我们考虑到了这?点, 所以如果不进?配置, 就??动配置
默认?志?件超过10M就进?分割
配置?志?件分割:
- ?志?件超过1KB就分割(设置1KB是为了更好展?. 企业开发通常设置为200M, 500M等, 此处没有明确标准)
- 分割后的?志?件名为: ?志名.?期.索引
项?运?, 多打印?些?志, ?志分割结果:
2.5.4 配置?志格式
?前?志打印的格式是默认的
3. 更简单的?志输出
每次都使? LoggerFactory.getLogger(xxx.class) 很繁琐, 且每个类都添加?遍, lombok给我们提供了?种更简单的?式.
- 添加 lombok 框架?持
- 使? @Slf4j 注解输出?志。
3.1 添加 lombok 依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
3.2 输出?志
4. 总结
- ?志是程序中的重要组成部分,使??志可以快速的发现和定位问题,Spring Boot 内容了?志框架,默认情况下使?的是 info ?志级别将?志输出到控制台的,我们可以通过 lombok 提供的@Slf4j 注解和 log 对象快速的打印?定义?志.
- ?志包含 6 个级别, ?志级别越?,收到的?志信息也就越少,我们可以通过配置?志的保存名称或保存?录来将?志持久化.