SpringBoot项目在运行时动态调整日志的级别,实现打印debug日志实现问题定位
在生产环境下,我们为了节约日志文件的存储资源和提高日志检索的性能,不得不只打印一些关键的日志。比如只会打印ERROR或WARN级别日志。
但如果程序出现问题时我们需要快速定位,这个时候就需要通过动态调整日志级别来完成。
这时就需要引用Spring Boot中四大核心之一的spring-boot-starter-actuator
依赖,他提供了一系列用于监控和管理 Spring Boot 应用程序的端点。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
添加对应的配置,开启日志端点配置,
management:
endpoints:
web:
exposure:
# 默认值访问health,info端点 日志级别控制需要使用/loggers端点, 用*可以包含全部端点
include: "*"
# 修改访问路径 2.0之前默认是/; 2.0默认是/actuator可以通过这个属性值修改
base-path: /actuator
endpoint:
shutdown:
enabled: true #打开shutdown端点
health:
show-details: always #获得健康检查中所有指标的详细信息
# actuator端口 如果不配置做默认使用上面8080端口
server:
port: 10000
编写测试日志级别类
Controller
package com.pzb.auth.controller;
import com.pzb.auth.service.TestService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p> 测试日志级别Controller </p>
* <p> 创建于 2024/10/26 20:42 </p>
*
* @author <a href="mailto:987080702@qq.com">pengzhangbin</a>
* @version v1.0
* @since 1.0.0
*/
@RestController
@RequestMapping("/test")
@AllArgsConstructor
public class TestController {
private final TestService testService;
/**
* 测试日志级别
*/
@GetMapping("/log/level")
public void testLogLevel() {
testService.testLogLevel();
}
}
Service
package com.pzb.auth.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* <p> 动态调整日志级别测试 </p>
* <p> 创建于 2024/10/26 20:38 </p>
*
* @author <a href="mailto:987080702@qq.com">pengzhangbin</a>
* @version v1.0
* @since 1.0.0
*/
@Slf4j
@Service
public class TestService {
/**
* 测试日志级别
*/
public void testLogLevel() {
log.info("info test");
log.error("error test");
log.warn("warn test");
log.debug("debug test");
log.trace("trace test");
}
}
启动服务访问http://localhost:8080/test/log/level
结果如下:
默认的级别为INFO,所以会打印INFO,以及比INFO高的WARN和ERROR的日志
查看默认某个包或类的日志级别
GET请求没有body http://127.0.0.1:10000/actuator/loggers/{packageOrClass}
,可以看到是INFO级别
修改某个包或类的日志级别
http://127.0.0.1:10000/actuator/loggers/{packageOrClass}
POST请求
BODY
{
// 配置日志级别为DEBUG,
// slf4j中日志级别由高到低为: ERROR、WARN、INFO、DEBUG、TRACE
"configuredLevel": "DEBUG"
}
现在查看默认某个包或类的日志级别可以看到日志级别变成了DEBUG
{
"configuredLevel": "DEBUG",
"effectiveLevel": "DEBUG"
}
现在调用可以看到效果如下: