SpringBoot使用Logback作为日志框架,项目中一般在application.properties中指定日志级别,比如以下设置分别指定了不同的包使用不同的日志级别: l o g g i n g . l e v e l . o r g . s p r i n g f r a m
SpringBoot使用Logback作为日志框架,项目中一般在application.properties中指定日志级别,比如以下设置分别指定了不同的包使用不同的日志级别:
logging.level.org.springframework=WARNlogging.level.com.company=INFO但是在现场排查问题时,往往需要降低日志级别到DEBUG,一般的做法是换参数重启SpringBoot进程,但有些现场环境不能重启,需要动态调整日志级别,此时可以通过LoggingSystem进行调整,比如在Controller中添加一个设置日志级别的接口:
@Resourceprivate LoggingSystem loggingSystem;@GetMapping("/logger/{level}")@ResponseBodypublic String setLogLevel(@PathVariable String level) { //此处可以控制仅允许本地访问或加身份判断,防止非法调用 //........ //设置com.company包下的日志级别,和application.properties对应 this.loggingSystem.setLogLevel("com.company", LogLevel.valueOf(level.toUpperCase())); //如果需要精细控制,也可以遍历目前所有的logger然后逐一设置 List<LoggerConfiguration> logs = this.loggingSystem.getLoggerConfigurations(); for(LoggerConfiguration log : logs) { String loggerName = log.getName(); //名称,可用于判断 if(.............) //此处可以用于过滤需要调整哪些 this.loggingSystem.setLogLevel(loggerName, LogLevel.valueOf(level.toUpperCase())); } return "ok";}这样用curl等调用 GET /logger/debug 就可以立即切换日志级别到DEBUG级别了,非常方便。