目录
1、自定义输出日志
2、日志级别
2.1 日志级别分类(6种)
2.2 配置日志级别(在.yml文件中设置:)
(1)设置日志整体级别
(2)分目录设置日志级别
3、日志怎么持久化
3.1 设置日志文件名和路径(.yml文件下配置)
3.2 对日志分割:每隔多少M分割
4、更简单的日志输出-lombok(对1的优化)
5、补充:lombok 更多注解说明
问题1:为什么要学习日志文件?
很简单,代码出Bug了,第一时间肯定是看日志观察报错信息呀~就像去医院看病,不知道是什么病,就先去拍个片子,才能找症状所在。所以日志的作用就是:发现和定位问题。
问题2:目前日志存在的问题?
(1)日志没有持久化(所以要保存在硬盘上)
⽇志默认是打印在控制台上的,⽽控制台的⽇志是不能被保存的。
(2)日志没有详细的信息。
SpringBoot为什么能打印日志,是因为Spring Boot 内置了⽇志框架(不然也输出不了⽇志))
Logger 对象是属于 org.slf4j 包下的,不要导⼊错包。
执行结果:
因为 Spring Boot 中内置了⽇志框架 Slf4j,所以咱们可以直接在程序中调⽤ slf4j 来输出⽇志。。
⽇志级别可以帮你筛选出重要的信息,⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。
日志打印过多过少都不适合:过多影响系统性能,过少不利于查找问题。
⽇志的级别分为:
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息(默认⽇志级别);
- warn:警告,不影响使⽤,但需要注意的问题;
- error:错误信息,级别较⾼的错误⽇志信息;(通常需要我们解决)
- fatal:致命的,因为代码异常导致程序退出执⾏的事件。
设置了 warn 就只能收到 warn、error、fatal 级别的⽇志了。
Spring项目默认的日志级别是info,低于info的不打印,高于info的打印。
此时打印结果:只有warn级别以上的。
打印结果:demo2中打印的是debug以上的;root根目录下,在demo1下打印的是warn以上的。
以上的⽇志都是输出在控制台上的,然⽽在实际中需要将⽇志保存下来,这个过程就叫做持久化。
日志持久化的解决办法:设置日志的保存路径。
如果没有日志,就按如下清空缓存后刷新。
因为都是在yml文件下的logging下配置,所以可以将上述信息写在一个logging下。
执行结果
原因:看target下的编译文件:默认名称就是log。
原因分析:原先的代码编译过程:
Lombok 的作⽤如下图所示:
(1)基本注解
注解 | 作用 |
@Getter | 自动添加 getter 法 |
@Setter | 自动添加 setter 法 |
@ToString | 自动添加 toString 法 |
@EqualsAndHashCode | 自动添加 equals 和 hashCode 法 |
@NoArgsConstructor | 自动添加参构造法 |
@AllArgsConstructor | 自动添加全属性构造法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为 null |
@RequiredArgsConstructor | 自动添加必需属性的构造法,final + @NonNull 的 属性为必需 |
(2)组合注解:我们前一节写Student类的时候,就用到这个@Data注解来生成get和set方法。
注解 | 作 |
@Data | @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor |
(3)⽇志注解@SIF4j : 添加一个名字为log的日志。(见4)