动态修改SpringBoot应用的日志级别
背景
线上环境的代码日志输出级别通常都是INFO(SpringBoot的默认日志级别就是INFO),在这个日志级别下只会打印一些非常重要的信息。
但是一旦线上代码出现了Bug,就需要输出在代码中预置好的更详细的日志(使用logger.debug()
或logger.trace()
方法),但是INFO级别下这些调试日志是无法输出的,这个时候就需要将日志级别修改为DEBUG或TRACE,痛苦的是线上环境是不太可能允许轻易修改配置并重启的。
我们需要在不重启应用的情况下动态修改日志级别,可以使用Spring Actuator实现这样的需求。
步骤
添加依赖
在pom.xml中添加Spring Actuator依赖
1 | <dependency> |
暴露服务
在application.properties文件中配置暴露服务访问点:loggers
1 | health, info, loggers = |
查看日志级别
验证loggers endpoint已经暴露出来:
访问/actuactor/loggers可以查看到全局的日志级别(ROOT元素):
以及按包分类的日志级别(比如me.ningyu.burnerlist):
修改日志级别
发送HTTP POST请求到指定的URL,请求体中的内容为要修改为的日志级别。
HTTP URL:http://:/actuator/loggers/,logLevel为ROOT或者具体的包名,比如me.ningyu.burnerlist
HTTP Header:application/json
HTTP Body:
1
2
3{
"configuredLevel": "DEBUG"
}
可以用你熟悉的Http客户端发送请求:
使用Postman
使用Curl
1 | curl --location --request POST 'http://localhost:8080/actuator/loggers/me.ningyu.burnerlist' \ |
验证
修改前日志级别为INFO:
程序中以debug方法打印日志,但是因为日志级别是INFO,因此不会打印:
通过REST API动态修改日志级别:
修改后日志级别为DEBUG:
这次因为日志级别调整为了DEBUG,程序中以debug方法打印日志就可以打印出来:
备忘
在Spring Boot 2.x中为了安全期间,Actuator只开放了两个服务接入点:
/actuator/health
和/actuator/info
,可以通过下面的方法打开所有的监控:1
* =
常见的日志级别:
1
2
3Fatal > Error > Warn > Info > Debug > Trace
或
Off > Error > Warn > Info > Debug > Trace