0
点赞
收藏
分享

微信扫一扫

SpringBoot2动态设置日志级别

月孛星君 2023-03-21 阅读 48

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

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

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

@Resource
private LoggingSystem loggingSystem;


@GetMapping("/logger/{level}")
@ResponseBody
public 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级别了,非常方便。


举报

相关推荐

0 条评论