在 Spring Boot 中动态修改 Logback 日志级别(无需重启应用),可通过 Spring Boot Actuator 端点 或 编程式 API 实现,核心是利用 Logback 自身的日志级别管理能力。以下是两种常用方案:
一、方案 1:通过 Spring Boot Actuator(推荐,无代码侵入)
Spring Boot Actuator 提供了 loggers 端点,可直接查询和修改日志级别,适合生产环境快速调整。
步骤 1:添加 Actuator 依赖
在 pom.xml 中添加依赖(确保已引入 Logback,Spring Boot 默认集成):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
步骤 2:配置 Actuator 暴露 loggers 端点
在 application.yml 中开启 loggers 端点(默认仅暴露 health、info):
management:
endpoints:
web:
exposure:
include: loggers # 暴露 loggers 端点(可添加其他端点,如 health, info)
endpoint:
loggers:
enabled: true # 启用 loggers 端点(默认已启用)
步骤 3:动态修改日志级别
通过 HTTP 请求调用 loggers 端点修改级别,支持 全局级别 或 指定包 / 类级别。
(1)查询当前日志级别
-
查看全局日志级别:
curl http://localhost:8080/actuator/loggers/ROOT
响应示例(
level为当前级别):{ "configuredLevel": "INFO", "effectiveLevel": "INFO" } -
查看指定包 / 类的日志级别(如
com.example.controller):curl http://localhost:8080/actuator/loggers/com.example.controller
(2)修改日志级别
发送 POST 请求,通过 JSON 体指定目标级别(支持 TRACE、DEBUG、INFO、WARN、ERROR、OFF)。
-
修改全局级别(ROOT Logger):
curl -X POST http://localhost:8080/actuator/loggers/ROOT \ -H "Content-Type: application/json" \ -d '{"configuredLevel": "DEBUG"}' - 修改指定包级别(如
com.example.service):curl -X POST http://localhost:8080/actuator/loggers/com.example.service \ -H "Content-Type: application/json" \ -d '{"configuredLevel": "DEBUG"}' - 修改指定类级别(如
com.example.controller.UserController):curl -X POST http://localhost:8080/actuator/loggers/com.example.controller.UserController \ -H "Content-Type: application/json" \ -d '{"configuredLevel": "TRACE"}' - 重置级别(恢复为继承的上级级别):
curl -X POST http://localhost:8080/actuator/loggers/com.example.service \ -H "Content-Type: application/json" \ -d '{"configuredLevel": null}'