背景
服务在生产环境跑,出了点问题,需要 debug 级别的日志;但是平时生产环境谁用 debug,都是用 info 级别。
按一般的流程,改日志级别需要修改文件、重新打包发版,重启是免不了了,但重启可能导致问题不能复现。
现在才知道,日志级别是可以在运行过程中动态修改的。记录下来。
依赖
这个功能有赖于 Spring Boot Actuator。诶,又是你,之前项目中已经有引入的,用来做服务的监控。
如果没有引入,需要在pom.xml
中添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
配置
然后找一下配置项management.endpoints.web.exposure.include
是否存在,如果没有就添加
management.endpoints.web.exposure.include=info,health,loggers
如果有的话,就在原有值里加上loggers
即可。
接口
开启了 loggers endpoint,应用启动后就可以访问以下3个接口:
- GET /actuator/loggers 返回当前应用全部的日志级别信息
- GET /actuator/loggers/{name} 查看{name}的日志级别
- POST /actuator/loggers/{name} 修改{name}的日志级别
首先访问第一个接口(http://localhost:8080/actuator/loggers)看一看:
找到loggers
部分,我这里返回的是
"loggers": { "ROOT": { "configuredLevel": "INFO", "effectiveLevel": "INFO" } }
表示根节点的日志级别是INFO
。(访问http://localhost:8080/actuator/loggers/ROOT也可以看到)
那么要怎么修改呢,调用对应的POST
接口即可:
curl -X POST http://localhost:8080/actuator/loggers/ROOT -H "Content-Type: application/json" -d "{\"configuredLevel\":\"DEBUG\",\"effectiveLevel\":\"DEBUG\"}"
再次查看GET
接口,可以看到已经变为DEBUG
级别。
有关原理和其他细节,可以查看以下的参考。
发表评论