【进阶】Spring Boot日志文件

努力经营当下,直至未来明朗!


普通小孩也要热爱生活!

一、日志有什么用

  1. 日志是解决问题最直观、最有效的方法。
  2. ⽇志对于我们来说,最主要的⽤途就是排除和定位问题
  3. 除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:

① 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
③ 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。
以上这些都是⽇志提供的⾮常实⽤的功能。


二、日志怎么用

  1. Spring Boot运行就有日志文件,默认是输出到控制台的sout。
  2. Spring Boot日志能够输出,说明Spring Boot是内置了日志框架的。
  3. 日志默认是输出到控制台上,不能持久化保存。

三、 自定义日志打印

  1. Spring Boot 自定义日志的打印:
    1)在一个类中先获取到打印日志对象(日志框架提供日志对象,而日志框架已经默认集成到Spring Boot中了)
    2)使用日志对象提供的方法实现日志的打印。

  2. 自定义日志打印
    1)首先创建一个Spring Boot项目(创建方式见:Spring Boot项目创建
    2)新建类(与启动类同级或其子目录下),加上五大类注解和非静态页面@ResponseBody注解
    3)获取日志对象:Logger是从org.slf4j中获取的,其中LoggerFactory.getLogger(参数:类对象)
    4)写一个方法,使用日志提供的打印方法来打印日志;并给该方法加上路由@RequestMapping(“/xxx”)

[补充] log.日志级别

  • trace(); // 微量级别
  • debug(); // 调试阶段打印日志
  • info(); // 输出普通日志信息
  • warn(); // 警告
  • error(); // 错误

0
因为 Spring Boot 中内置了⽇志框架 slf4j,所以咱们可以直接在程序中调⽤ slf4j 来输出⽇志

1

  1. 日志打印输出:
    2
    为什么只有三个输出?
    理由info是默认的级别。只会输出大于等于当前级别的信息。

  2. 日志格式说明:
    3

  3. 常见日志框架说明(简单看看就行):
    5


四、 日志级别

  1. 日志级别有什么用?
    ① ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。
    ② ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。

  2. 日志级别的分类
    1)trace:微量,少许的日志;级别最低
    2)debug:调试的时候打印的日志。
    3)info:普通日志;是Spring Boot 默认 的日志级别。
    4)error:错误日志;级别较高。
    5)fatal:致命的日志,因为代码异常导致程序退出执行。 【fatal是系统输出的日志,不能自定义打印!

fatal不能被自定义打印的,其余全部是可以进行打印的

  1. 日志级别的顺序(主流说法):只能看到该级别以及往上级别的信息
    6

  2. 日志级别的设置:在配置文件中进行设置
    ⽇志级别设置只需要在配置⽂件中设置“logging.level”配置项即可。

1)设置 全局(root) 的日志级别
7

2)设置某个/局部 文件夹的日志级别
注意:该文件夹的目录是从蓝色的java文件夹下开始计算的
8

3)存在全局日志和局部日志级别同时设置时,此时访问局部日志的时候就是使用局部日志级别。也就是说:局部日志级别优先于全局日志级别


五、日志持久化

  1. 日志持久化就是将日志信息永久保存到磁盘上的某个位置。

  2. 日志持久化实现手段
    1)在配置文件中设置日志的保存路径(logging.file.path=到文件夹即可),当设置了保存路径之后,日志就会自动地进行持久化。
    2)在配置文件中设置日志保存的名称logging.file.name=,日志会自动进行持久化。

  3. 具体实现日志持久化:
    1)在配置文件中设置日志的保存路径(logging.file.path=到文件夹即可):
    如图,如果说路径正确的情况下并没有在对应位置生成日志,此时可能是:Spring Boot会认为 \字母 是一个特殊的字符而不是目录,此时日志持久化失败。
    10

解决方法
① 此时,修改路径中的\为 / 重新进行持久化:(推荐使用该方式)
11
12

② 将 \进行转义操作
13
15

2)在配置文件中设置日志保存的名称 [logging.file.name=指定全路径or相对路径,一般是指定全路径,相对路径找不到]
16
17

  1. 持久化之后,每次重启之后都不会覆盖之前的内容,而是直接进行追加。

  2. 日志默认大小是10MB,当日志大于了10MB之后就会默认在文件名后面加上1、2、…序号进行分割。

  3. 如果想要自己设置文件大小并进行分割操作,在配置文件中进行设置:(了解就行)

[此时示例是在application.yml配置文件中进行设置]
18

  1. 日志格式也是可以进行格式化的:logging: .去查看(.properties中)

六、更简单的日志输出——lombok

  1. 准备工作:添加lombok到当前项目
    1)在项目之前就添加(也就是创建项目的时候就选上了lombok)
    2)在原有的项目基础上进行添加
    首先安装插件plugins:EditStarters -> 在pom.xml中depencies -> 右键 -> generate -> Edit Starters -> 链接地址默认SpringBoot官网(不用修改) -> search lombok -> 添加 -> ok

20
21
22

  1. 在引入lombok依赖成功之后,就可以使用 @Slf4j 注解

@Slf4j 注解替代了之前通过LoggerFactory.getLogger获取日志对象的操作,默认生成的是log对象
(注意,在方法上同样要加上路由)

  1. 注意:如果某个类要实现浏览器web的调用,类注解就必须是@Controller,其他类注解就会404!另外,还必须给该类加上@ResponseBody返回非静态页面数据,否则就会报500!

  2. lombok原理:
    jvm只能识别.class字节码文件,所以lombok在编译时可以将注解@Slf4j 进行等价替换
    30

  3. lombok更多注解说明:(看看就行
    lombok注解文档:lombok注解

1)基本注解

注解作用
@Getter自动添加getter方法
@Setter自动添加setter方法
@ToString自动添加toString方法
@EqualsAndHashCode自动添加equals和hashCode方法
@NoArgsConstructor自动添加无参构造方法
@AllArgsConstructor自动添加全属性构造方法,顺序按照属性的定义顺序
@NonNull属性不能为空
@RequiredArgsConstructor自动添加必需属性的构造方法,final + @NonNull 的属性为必需

2)组合注解

注解作业
@Data@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor +@NoArgsConstructor

3) 日志注解

注解作用
@Slf4j添加⼀个名为 log 的⽇志,使⽤ slf4j

小结

  1. 使用日志快速定位和解决问题。另外,还可以记录用户登录日志、系统操作日志、程序执行时间等
  2. 日志是Spring Boot项目内置的框架
  3. 默认日志级别是info,只能打印大于等于默认级别的日志
  4. fatal不能自定义打印
  5. 日志默认级别的设置logging.level.
  6. 日志持久化设置:路径logging.file.path= 或 名称logging.file.name=
  7. 更简单的日志输出:lombok依赖,@Slf4j注解

11111

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值