前言:
想必日志大家伙在项目开发调试过程中常会使用,这篇文章我们来一起探讨一下 Spring Boot 项目中日志的定义与使用,主要针对以下几个方面重点叙述
日志级别
日志框架进行日志定义
日志持久化
1 日志简述
1.1 为什么使用日志
日志大家在开发过程中想必并不陌生,是什么的问题我就不过多赘述。但日志除去能够让我们快速定位和解决问题以外,在实际场景中还有诸多用处
- 除去定位问题外,日志的业务功能如下
-
记录用户登陆日志,避免恶意攻击
-
记录系统操作日志,进行问题回溯
-
记录程序执行时间,以便进行代码优化
…
-
1.2 日志级别
1)引入
- 我们在实际场景中,日志除去记录重要的问题信息以外,还会记录众多操作、调试等细节信息,显然这两者日志的优先级必然是不一样的,我们自然更希望保留重要部分。如果我们有 过滤一些繁琐的细节信息、只将重要信息保留的需求,我们就可以对日志级别进行调整
2)具体级别
日志包含了以下 6 种隔离级别,从低到高进行排序(部分资料以下级别是从高到低排序)
-
trace:级别最低的日志
-
debug: 记录调试信息
-
info: 默认的隔离级别
-
warn:相关警告,一般不使用
-
error:错误信息
-
fatal:导致程序退出的信息,无需我们手动定义
3)如何设置
如果不进行设置,日志隔离级别默认是 info
- 在配置文件中,使用如下进行设置
这里使用 yml 格式,root 表示将项目日志级别都设置为相同值
我们也可以给具体的 目录单独设置日志级别,直接在 level 下书写目录的路径和级别即可,一般我们只定义到 包级别 即可,
2 自定义日志
2.1 日志框架
1)引入
- 如何自定义日志,我们最容易联想到使用最熟悉的 “System.out.println()”,这也是我们在调试代码中相对常用的手段。但是使用这种方法太过 “无脑”, 我们并不能获取到日志时间、隔离级别和定位具体类等最基本但重要的信息。为此,有众多现成完善的日志框架我们来使用即可
2)日志框架
- 这里我们使用的是 slf4j 作为日志框架,这也是当下最主流的框架之一
- slf4j 也使用了 “门面模式”,slf4j 就是是日志门面,更底层的实现上使用的就是 logback
- 常见的日志门面还有 commons-logging,常见的日志实现还有 logg4j 1/2 和 JUL
2.2 slf4j 自定义日志
- 获取 log 对象
- 调用对象具体方法
1)获取 log 对象
- 使用 loggingFactory 工厂类的 getLogger() 方法,并传入当前 类对象,获取 log 对象
2)调用 log 对象的具体方法
- log 对象包含了众多方法,我们主要使用的就是 traceO()、debug()、info()、warn() 和 error() 这五种方法
- 虽然这些方法都可以使用,但是显示的时候只会保留 比设定日志级别高的日志
注意导包使用 slf4j 下的
上面设置的日志级别是 warn,所以只打印 warn 级别及以上的
tip:
我们似乎发现,日志的级别明明有六种,为什么只有五种定义日志的方法,fatal 级别的日志定义方法去哪里了?
- 其实只有项目出现致命错误、强制退出的时候,才会触发 fatal 级别的日志,而这种情境下的日志无需我们去考虑打印,所以也就没有提供 fatal 级别的日志定义方法
2.3 lombook 定义日志
1)具体使用
- 使用 lombook 调用方法和上述相同,只是可以使用 @Slf4j 注释 直接获取到 log 对象,更加简洁,使用时直接使用 log 名称调用相关方法即可
2)实现原理
- lombook 在将 .java 文件转换为 .class 文件时,会将 @Slf4j 注解对应的代码实现放入到字节码文件中
我们虽然使用了注释,在 .class 字节码中依然是 log 对象,可以在 target 目录下查看
3 日志持久化
3.1 为社么要日志持久化
- 我们不难发现,当前的日志都是打印在控制台中的,我们重启程序的时候原本所有的日志信息都不复存在了,但是这定不是我们想看到的,我们期望能够将日志保存下来,以供后续的使用,这就得依靠日志的持久化
3.2 具体实现
1)设置路径
- 在配置文件中,输入 logging.file.path 进行设置
注意对于 yml 格式来说,同一个根目录的数据要放在一起
2)设置文件名
- 在配置文件中,输入 logging.file.name 进行设置,这里一般传入文件的绝对路径
上述默认文件名为 spring.log,我们可以传入绝对路径进行更改
tip:
上面两种方法实现日志持久化时,将日志写入到日志文件到操作并不会覆盖原有的数据,而是进行数据追加
总结:
本篇文章主要讨论了六大日志级别,如何使用 slf4j 创建 log 对象定义日志,lombook 使用 @Slf4j 注解更高效创建 log 对象,
以及最后如何在配置文件进行设置,实现日志持久化
至此,文章就全部结束了,觉得不错的铁子,欢迎 点赞、评论、收藏 三连哈