一、了解日志
1、什么是日志
程序运行过程中所产生的信息就是日志
当我们启动SpringBoot时,控制台打印的信息就是日志
2、日志的作用
- 发现和定位问题
- 记录用户的登录信息,进行大数据分析
- 记录系统的操作信息,方便数据的恢复和定位操作者
- 记录程序的执行时间,方便以后优化程序
二、自定义打印日志
1、实现步骤
- 获得日志对象
注意:日志对象Logger 属于org.slf4j包下的,不要导错包 - 使用日志对象打印日志
Controller包中,设置一个LoggerController类
package com.example.demo.Controller;
@Controller
@ResponseBody
public class LoggerController {
private Logger logger = LoggerFactory.getLogger(LoggerController.class);
@RequestMapping("/logger")
public String logger(){
logger.trace("日志级别: trace");
logger.debug("日志级别: degue");
logger.info("日志级别: info");
logger.warn("日志级别: warn");
logger.error("日志级别: error");
return "logger";
}
}
启动SpringBoot,浏览器输入localhost:8080/logger 除启动SpringBoot时,打印的日志外,还打印如下日志: (由于SpringBoot默认日志级别是 info,因此只能打印 info 及更高级别的日志)
2、日志的格式说明
3、SpringBoot内置了日志框架slf4j,采用了“门面模式”
- 日志门面:slf4j
- 日志实现:logback
关于常见的日志框架:
- 日志框架包括日志门面、日志实现
- 日志门面就相当于是装修公司,日志实现相当于是工程队(实现具体的操作),日志门面仅能对应一个日志实现
三、日志级别
1、了解日志级别
日志级别就是用来进行日志的过滤
当某个目录设置了日志级别,我们只能得到此级别及更高级别的日志
- trace:级别最低
- debug:需要调试时候的关键信息
- info:普通的打印信息
- warn:警告信息
- error:错误信息
- fatal:灾难级的,因为代码异常导致程序退出执行的事件;系统级别,程序猿无法打印
2、配置日志级别
(1)、在SpringBoot配置文件中配置
logging:
level:
root: warn
com:
example:
demo:
Controller: trace
DemoApplication: info
- 同时设置全局的日志级别和指定目录的日志级别,指定目录的日志级别为前者
- 需要注意的是:必须从根目录(com包)开始,一步一步的到指定目录;如下设置日志级别,没用
logging:
level:
demo:
Controller: trace
(2)、启动SpringBoot,浏览器输入localhost:8080/logger
四、日志持久化
日志持久化:将控制台打印的日志写到相应的目录或文件下
logging:
file:
path: D:\
name: D:\Springlogging.log
如果日志的内容过大,超过日志文件的容量,系统自动设置另一个日志文件保存
将controller包下的error级别以上的日志保存到log_all.log下,将service下warn级别以上的日志保存到log_all.log下
logging:
level:
com:
example:
demo:
controller: error
service: warn
file:
name: D:\log_all.log
五、使用lombok进行日志输出
1、步骤
- 添加 lombok 框架
- 使用 @Slf4j 注解输出日志
(1)、添加lombok框架,在创建SpringBoot项目时,引入即可
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
(2)、添加 @Slf4j 注解,使用log日志对象,即使log标红,没关系,照样运行项目
在Controller包中,创建一个LoggerSlf类,此时日志级别默认是 info
package com.example.demo.Controller;
@Controller
@ResponseBody
@Slf4j
public class LoggerSlf {
@RequestMapping("/loggerSlf")
public String logger(){
log.trace("日志级别: trace");
log.debug("日志级别: degue");
log.info("日志级别: info");
log.warn("日志级别: warn");
log.error("日志级别: error");
return "logger";
}
}
启动SpringBoot,在浏览器输入localhost:8080/loggerSlf
2、lombok的原理
lombok的原理:lombok通过遵循Java编译器增强的规范,实现了Java源代码在生成字节码的时候功能的增强 @Slf4j注解的作用:IDEA编译源代码的时候,根据注解声明,在字节码文件中自动添加了一段 创建日志对象 的代码
对比 .java源文件 和程序运行后出现的 targe目录 下的 .class文件 ,发现 .class 文件 较 .java源文件 少了一个@Slf4j 注解,多了一段创建名为 log 的日志对象 的代码
3、关于lombok的更多注解
@Data | @Getter + @Setter + @ToString + @EqualsAndHashCode + @NoArgsConstructor + @RequiredArgsConstructor |
---|
@Getter | 自动添加getter方法 | @Setter | 自动添加setter方法 | @ToString | 自动添加toString方法 | @EqualsAndHashCode | 自动添加equals和hashCode方法 | @NoArgsConstructor | 自动添加无参构造方法 | @AllArgsConstructor | 自动添加全属性的构造方法,顺序按照属性定义的顺序 | @RequiredArgsConstructor | 自动添加 必需属性的构造方法,final+@NonNull的属性为必需 | @NonNull | 属性不能为空 |
|