[短的文章] Spring Boot 日志创建使用、日志级别、@Slf4j、日志持久化——Spring Boot 系列

在这里插入图片描述

前言:

想必日志大家伙在项目开发调试过程中常会使用,这篇文章我们来一起探讨一下 Spring Boot 项目中日志的定义与使用,主要针对以下几个方面重点叙述






1 日志简述


1.1 为什么使用日志

日志大家在开发过程中想必并不陌生,是什么的问题我就不过多赘述。但日志除去能够让我们快速定位和解决问题以外,在实际场景中还有诸多用处

  • 除去定位问题外,日志的业务功能如下
    • 记录用户登陆日志,避免恶意攻击

    • 记录系统操作日志,进行问题回溯

    • 记录程序执行时间,以便进行代码优化




1.2 日志级别

1)引入
  • 我们在实际场景中,日志除去记录重要的问题信息以外,还会记录众多操作、调试等细节信息,显然这两者日志的优先级必然是不一样的,我们自然更希望保留重要部分。如果我们有 过滤一些繁琐的细节信息、只将重要信息保留的需求,我们就可以对日志级别进行调整



2)具体级别

日志包含了以下 6 种隔离级别,从低到高进行排序(部分资料以下级别是从高到低排序)

  • trace:级别最低的日志

  • debug: 记录调试信息

  • info: 默认的隔离级别

  • warn:相关警告,一般不使用

  • error:错误信息

  • fatal:导致程序退出的信息,无需我们手动定义



3)如何设置

如果不进行设置,日志隔离级别默认是 info

  • 在配置文件中,使用如下进行设置

这里使用 yml 格式,root 表示将项目日志级别都设置为相同值

image-20221008161646212

我们也可以给具体的 目录单独设置日志级别,直接在 level 下书写目录的路径和级别即可,一般我们只定义到 包级别 即可,

image-20221123233036190





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 下的

image-20221008161910414

image-20221008162155916

上面设置的日志级别是 warn,所以只打印 warn 级别及以上的

image-20221008162258839


tip:

我们似乎发现,日志的级别明明有六种,为什么只有五种定义日志的方法,fatal 级别的日志定义方法去哪里了?

  • 其实只有项目出现致命错误、强制退出的时候,才会触发 fatal 级别的日志,而这种情境下的日志无需我们去考虑打印,所以也就没有提供 fatal 级别的日志定义方法



2.3 lombook 定义日志

1)具体使用
  • 使用 lombook 调用方法和上述相同,只是可以使用 @Slf4j 注释 直接获取到 log 对象,更加简洁,使用时直接使用 log 名称调用相关方法即可

image-20221008162552215

image-20221008162610783

2)实现原理
  • lombook 在将 .java 文件转换为 .class 文件时,会将 @Slf4j 注解对应的代码实现放入到字节码文件中

我们虽然使用了注释,在 .class 字节码中依然是 log 对象,可以在 target 目录下查看

image-20221008162831324





3 日志持久化


3.1 为社么要日志持久化

  • 我们不难发现,当前的日志都是打印在控制台中的,我们重启程序的时候原本所有的日志信息都不复存在了,但是这定不是我们想看到的,我们期望能够将日志保存下来,以供后续的使用,这就得依靠日志的持久化



3.2 具体实现

1)设置路径
  • 在配置文件中,输入 logging.file.path 进行设置

注意对于 yml 格式来说,同一个根目录的数据要放在一起

image-20221008163524435

image-20221124114128720



2)设置文件名
  • 在配置文件中,输入 logging.file.name 进行设置,这里一般传入文件的绝对路径

上述默认文件名为 spring.log,我们可以传入绝对路径进行更改


tip:

上面两种方法实现日志持久化时,将日志写入到日志文件到操作并不会覆盖原有的数据,而是进行数据追加




总结:
本篇文章主要讨论了六大日志级别,如何使用 slf4j 创建 log 对象定义日志,lombook 使用 @Slf4j 注解更高效创建 log 对象,
以及最后如何在配置文件进行设置,实现日志持久化





至此,文章就全部结束了,觉得不错的铁子,欢迎 点赞、评论、收藏 三连哈

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值