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级别了,非常方便。