一 前言
有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置INFO,调试级别用作特殊情况下。此时如果线上想查看调试级别下的日志,又不能更改日志级别后重新发布该怎么办?
Spring Boot提供了日志级别动态配置功能,为我们的线上应用调试提供了很好的机制。在实际使用中需要结合Spring-Security提供的安全机制来保护Actuator 提供的各种系统级端点的安全访问。
SpringBoot从版本 1.5.1 之后就提供了基于 ==spring-boot-starter-actuator ==的端点 /loggers。通过该端点可以实现查看系统的 package-path 的日志级别,以及针对特定的 package-path 配置运行中的应用的日志级别的功能。
下面对动态调整日志的级别进行设置。
二 Spring Boot 依赖与配置
maven中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Actuator 配置
management:
endpoints:
web:
exposure:
include: loggers
初始化配置日志级别
可选日志级别: OFF ERROR WARN INFO DEBUG TRACE
设置全局日志级别
logging:
level:
root: INFO
设置特定 Package/Class 日志级别
logging.level.<Package/Class>=INFO
示例 : logging.level.com.cncloud.cncloud.admin.controller.GenTestController=info
三 运行时配置日志级别(测试案例)
申明测试案例:
@GetMapping("/testLogLevel")
@Inner(value = false)
public void testLogLevel(){
log.info("Logger Level :INFO");
log.debug("Logger Level :DEBUG");
log.error("Logger Level :ERROR");
}
查看所有 package / class 日志级别的配置
http://127.0.0.1:4000/actuator/loggers (当前服务运行端口/actuator/loggers)
查看单个 package / class 日志级别的配置
用法:
curl http://127.0.0.1:4000/actuator/loggers/<Package/Class>
查看测试案例日志输出
输出结果:
动态修改日志级别
#用法
curl -X POST \
http://localhost:4000/actuator/loggers/<Package/Class> \
-d '{"configuredLevel":"<LEVEL>"}'
运行测试
由此我们便可以动态的修改线上日志运行级别了