使用 Spring Boot 组件动态修改日志级别
前言
在日常工作中,我们为了方便定位问题通常都会打印日志,在开发、测试和生产环境中,日志级别可能都不一样,而在自己开发的过程中为了方便调试可能会打印很多日志,但是生产中为了性能这些日志我们可能需要删掉,只保留一些必要的日志
Log4j
定义了 8 个日志级别,其中的日志级别优先级从高到低为:
- OFF
- FATAL
- ERROR
- WARN
- INFO
- DEBUG
- TRACE
- ALL
从 Spring Boot@1.5
版本开始,Spring Boot Actuator 组件就提供了动态修改日志级别的能力
本篇文章讲下如何动态的修改日志的级别,不用重启项目直接给日志降级或者升级 👏
正式开始
首先创建一个 Spring Boot 项目
添加依赖(pom.xml
)
1 | <dependencies> |
new
一个测试类(cn.imzjw.log.controller.LogController.java
)
1 | package cn.imzjw.log.controller; |
application.yml
1 | management: |
测试
/loggers
接口提供了查看以及修改日志级别的能力
在浏览器打开 http://localhost:8080/actuator/loggers
查看当前应用所有包和类的日志级别
那么如何查看指定包和类的日志呢?
浏览器打开 http://localhost:8080/actuator/loggers/cn.imzjw.log.controller.LogController
注意替换成自己的包名
以及类名
结果可以看出我们的日志级别是 INFO
1 | { |
修改日志级别
在我们的测试类中的接口,打印了一条 LOGGER.debug("output debug log...");
而上面的结果显示我们的日志级别是 INFO
,所以这个 DEBUG
日志是不会打印的,不信我们测试一下
不管我怎么请求这个接口,控制台依然没打印这个日志
下面我们就把这个日志级别修改成 DEBUG
级别
你可以使用 Postman 工具,也可以直接使用命令行的方式,不管用啥,只要能请求到就行
这里我懒得打开 Postman 了,就直接用命令行的方式了
1 | curl -X POST http://localhost:8080/actuator/loggers/cn.imzjw.log.controller.LogController \ |
然后浏览器打开访问 http://localhost:8080/actuator/loggers/cn.imzjw.log.controller.LogController
注意换成自己的包名
和类名
可以发现是 DEBUG
级别了
这个时候我们再来访问那个 LogController
,可以发现控制台成功打印 DEBUG
日志了
注:上面是使用了 Postman
和 curl
的方式修改日志级别,这些方式都不适用于生产环境,因为很麻烦,容易出错
一般我们可以使用 Spring Boot Admin
可视化修改日志级别,这个可以自己研究,又或者改天我水一篇 Spring Boot Admin
的
告辞!!!