目录
1. 日志有什么 ?
日志是程序的重要组成部分,日志对于我们来说,最主要的途途就是排除和定位问题。
日志除了发现和定位问题之外,我们还可以通过日志实现以下功能:
- 记录用户登录日志, 便分析用户是正常登录还是恶意破解用户。
- 记录系统的操作日志, 便数据恢复和定位操作 。
- 记录程序的执行时间, 便为以后优化程序提供数据支持。
以上这些都是日志提供的非常实用的功能。
2. 日志怎么用?
Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:
以上内容就是 Spring Boot 输出的控制台日志信息。
通过上述日志信息我们能发现以下 3 个问题:
- Spring Boot 内置了日志框架(不然也输出不了日志)。
- 默认情况下,输出的日志并非是开发者定义和打印的,那开发者怎么在程序中自定义打印日志呢?
- 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久的保存下来呢?
3. 自定义日志打印
开发者自定义打印日志的实现步骤:
- 在程序中得到日志对象。
- 使用日志对象的相关语法输出要打印的内容。
3.1 在程序中得到日志对象
在程序中获取日志对象需要使用日志工厂 LoggerFactory,如下代码所示:
// 1.得到日志对象
private static Logger logger =
LoggerFactory.getLogger(UserController.class);
日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才能更方便、更直观的定位到问题类。
注意:Logger 对象是属于 org.slf4j 包下的,不要导入错包。
因为 Spring Boot 中内置了日志框架 Slf4j,所以咱们可以直接在程序中调用slf4j 来输出日志。
3.2 使用日志对象打印日志
日志对象的打印方法有很多种,如下代码所示:
//2.打印日志
log.trace("我是 trace.");
log.info("我是 info.");
log.warn("我是 warn.");
log.error("我是 error.");
log.debug("我是 debug.");
打印日志效果展示:
3.3 日志格式说明
4.日志级别
4.1日志级别的分类与使用
日志的级别分为:
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息;
warn:警告,不影响使用,但需要注意的问题;
error:错误信息,级别较高的错误日志信息;
fatal:致命的,因为代码异常导致程序退出执行的事件。
日志级别的顺序:
越往上接收到的消息就越少。
4.2 日志级别精确化设置
日志级别配置只需要在配置文件中设置“logging.level”配置项即可,如下所示:
#设置项目中所有目录的日志级别
#默认情况下项目的日志级别设置
logging.level.root=warn
#设置项目中controller目录的日志级别
#针对controller目录下的日志级别设置,当执行controller
# 目录时,日志级别以此为主,只有某个目录没有设置明确
#的日志输出级别时,才会使用默认的(root)的日志级别
logging.level.com.example.demo.controller=error
4.3默认日志输出级别
日志的输出级别,默认是 info.
5.日志持久化
以上的日志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。
- 在配置文件中设置日志的保存目录
配置日志文件的保存路径:
#设置日志的保存路径
logging.file.path=D:\\Temp
- 在配置文件中设置日志的保存文件名
#设置日志的保存名称
logging.file.name=D:/Temp/springboot.log
两种方式采用任何一个就可以,没必要两个都使用。
6.更简单的日志输出—lombok
每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加一遍,也很麻烦,这里讲一种更好用的日志输出方式,使用 lombok 来更简单的输出。
1. 添加 lombok 框架支持。
2. 使用 @Slf4j 注解输出日志。
6.1 添加 lombok 依赖
前置条件:添加插件Editstarters:
开始:
点击OK
之后在项目中重新导入Lombok即可。
6.2 编写输出日志
package com.example.demo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j//相当于通过loggerfactory获取日志对象
public class StudentController {
@RequestMapping("/sayhi2")
public String sayHi2(){
log.info("student里面的info");
log.warn("student里面的warn");
log.error("student里面的error");
return "你好,student";
}
}
注意:使用 @Slf4j 注解,在程序中使用 log 对象即可输入日志,并且只能使用 log 对象才能输出,这是 lombok 提供的对象名。
6.3 lombok 更多注解说明
基本注解
组合注解
日志注解
总结
日志是程序中的重要组成部分,使日志可以快速的发现和定位问题,Spring Boot 内容了日志框架,默认情况下使 的是 info 志级别将日志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解和 log 对象快速的打印自定义日志,日志包含 6 个级别:
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息;
warn:警告,不影响使用,但需要注意的问题;
error:错误信息,级别较高的错误日志信息;
fatal:致命的,因为代码异常导致程序退出执行的事件。
日志级别依次提升日志界别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称或保存目录来将日志永久地保存下来。