SpringBoot2动态设置日志级别

SpringBoot使用Logback作为日志框架,项目中一般在application.properties中指定日志级别,比如以下设置分别指定了不同的包使用不同的日志级别:

logging.level.org.springframework=WARN
logging.level.com.company=INFO

但是在现场排查问题时,往往需要降低日志级别到DEBUG,一般的做法是换参数重启SpringBoot进程,但有些现场环境不能重启,需要动态调整日志级别,此时可以通过LoggingSystem进行调整,比如在Controller中添加一个设置日志级别的接口:

 1 @Resource
 2 private LoggingSystem loggingSystem;
 3 
 4 
 5 @GetMapping("/logger/{level}")
 6 @ResponseBody
 7 public String setLogLevel(@PathVariable String level) {
 8     //此处可以控制仅允许本地访问或加身份判断,防止非法调用
 9     //........
10 
11     //设置com.company包下的日志级别,和application.properties对应
12     this.loggingSystem.setLogLevel("com.company", LogLevel.valueOf(level.toUpperCase()));
13 
14     //如果需要精细控制,也可以遍历目前所有的logger然后逐一设置
15     List<LoggerConfiguration> logs = this.loggingSystem.getLoggerConfigurations();
16     for(LoggerConfiguration log : logs) {
17         String loggerName = log.getName();            //名称,可用于判断
18         if(.............)                            //此处可以用于过滤需要调整哪些
19             this.loggingSystem.setLogLevel(loggerName, LogLevel.valueOf(level.toUpperCase()));
20     }
21 
22     return "ok";
23 }

 

这样用curl等调用 GET /logger/debug 就可以立即切换日志级别到DEBUG级别了,非常方便。

 

posted on 2023-03-21 15:10  BoyTNT  阅读(358)  评论(0编辑  收藏  举报

导航