目 录
- 一.日志有什么用?
- 二.日志怎么用?
- 三.自定义日志打印
- 四.日志持久化
- 五.日志级别
- 六.更简单的日志输出—lombok
日志的主要掌握内容:
输出自定义日志信息
将日志持久化
通过设置日志的级别来筛选和控制日志的内容
一.日志有什么用?
日志是程序的重要组成部分,除了发现和定位问题之外,我们还可以通过日志实现以下功能:
- 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。
- 记录系统的操作日志,方便数据恢复和定位操作人。
- 记录程序的执行时间,方便为以后优化程序提供数据支持
二.日志怎么用?
Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:
以上内容就是 Spring Boot 输出的控制台日志信息。
三.自定义日志打印
开发者自定义打印日志的实现步骤:
- 在程序中得到日志对象。
- 使用日志对象的相关语法输出要打印的内容
- 在程序中得到日志对象
在程序中获取日志对象需要使用志工厂 LoggerFactory,如下代码所示:
private static Logger log = LoggerFactory.getLogger(TestController.class);
日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才能更方便、更直观的定位到问题类
注意:Logger 对象是属于 org.slf4j 包下的,不要导入错包。
Spring Boot 中内置了日志框架 Slf4j,所以可以直接在程序中调用 slf4j 来输出日志
- 使用日志对象打印日志
日志对象的打印方法有很多种,我们可以先使用 info() 方法来输出日志,如下代码所示:
log.info("Hi~ springboot");
- 日志格式说明
四.日志持久化
以上的日志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。
想要将日志进行持久化,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名之后,Spring Boot 就会将控制台的日志写到相应的目录或文件下了。
- 设置日志的名称
怎么查看呢?
如果没有以上信息,我们就需要把 target 包删除掉,旧的信息重新更新一下运行就好了
根据以上信息,我们还可以知道:
- 日志不会丢失,会一直追加。
- 当日志比较大的时候,会自动分隔成多个文件。
- 设置日志的保存路径
五.日志级别
- 日志级别有什么用?
-
日志级别可以帮你筛选出重要的信息,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。
-
日志级别可以控制不同环境下,一个程序是否需要打印日志,如开发环境我们需要很详细的信息,而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求。
- 日志级别的分类与使用
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息(默认日志级别);
- warn:警告,不影响使用,但需要注意的问题;
- error:错误信息,级别较高的错误日志信息;
- fatal:致命的,因为代码异常导致程序退出执行的事件。(代码无法模拟)
越往上接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的日志了。
日志级别配置只需要在配置文件中设置“logging.level”配置项即可
logging:
level:
root: error
日志级别默认值为 info
此时还可以指定哪个目录下哪个文件打印哪种级别的日志:
六.更简单的日志输出—lombok
每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦,这里讲⼀种更好用的日志输出方式,使用 lombok 来更简单的输出。
- 添加 lombok 依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>
- 输出日志
注意:使用 @Slf4j 注解,在程序中使用 log 对象即可输入日志,并且只能使用 log 对象才能输出,这是 lombok 提供的对象名
- lombok 更多注解说明
注解 | 作用 |
---|---|
@Getter | ⾃动添加 getter ⽅法 |
@Setter | ⾃动添加 setter ⽅法 |
@ToString | ⾃动添加 toString ⽅法 |
@EqualsAndHashCode | ⾃动添加 equals 和 hashCode ⽅法 |
@NoArgsConstructor | ⾃动添加无参构造⽅法 |
@AllArgsConstructor | ⾃动添加全属性构造方法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为 null |
@RequiredArgsConstructor | ⾃动添加必需属性的构造方法,final + @NonNull 的属性为必需 |
@Data | @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor |
@Slf4j | 添加⼀个名为 log 的日志,使用 slf4j |