Bootstrap

Spring Boot 日志处理 - 动态级别修改

一 前言

有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置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>"}'

运行测试

在这里插入图片描述
在这里插入图片描述
由此我们便可以动态的修改线上日志运行级别了

;