需求背景
测试服务器需要修改日志级别,打印debug日志排查问题(默认日志及级别为info)
实现
新增一个接口,用于修改传入的包或类的日志级别即可
- 包名:com.xxx.yyy.controller
- 传入类名时需传入全限定类名,如: com.xxx.yyy.controller.zzzController
- level 传入以下类型之一:all | trace | debug | info | warn | error | off
@GetMapping("/update")
public Map updateLogLevel(@RequestParam String level, @RequestParam String pkgOrClazz) {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
// 更改指定包或类的日志级别
loggerContext.getLogger(pkgOrClazz).setLevel(Level.valueOf(level));
Map<String, Object> res = new HashMap<>();
res.put("code", 0);
res.put("msg", "ok");
return res;
}
测试
before
默认只打印 info 及之上的日志
修改指定类日志级别为 debug
after
再次请求,打印了 deug 及之上的日志
ps:服务重启后恢复默认配置,不会因为改了后忘了改回去导致打印一堆debug日志,很适合用于测试服务器上排查bug的场景