Springboot中如何動態(tài)修改logback的日志級別江场?
需求描述:生產(chǎn)上的項目日志級別通過為warn級別,但是有的時候定位問題需要切換到info或者debug級別窖逗,通常的情況是修改logback.xml然后重啟址否,但是通過以下方式可以在不用重啟t應(yīng)用(如tomcat)的情況下實現(xiàn)動態(tài)控制日志級別,代碼如下碎紊,通過瀏覽器訪問這個地址即可
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 動態(tài)切換日志級別的controller
* @author 江朝技術(shù)
*/
@RequestMapping("/api/log")
@RestController
public class LogbackController {
private Logger log = LoggerFactory.getLogger(LogbackController.class);
@RequestMapping(value = "/testlog")
public String logj(){
log.error("我是error");
log.warn("我是warn");
log.info("我是info");
log.debug("我是debug");
return "success";
}
/**
* logback動態(tài)修改包名的日志級別
* @param level 日志級別
* @param packageName 包名
* @return
* @throws Exception
*/
@RequestMapping(value = "/setlevel")
public String updateLogbackLevel( @RequestParam(value="level") String level,
@RequestParam(value="packageName",defaultValue = "-1") String packageName) throws Exception {
ch.qos.logback.classic.LoggerContext loggerContext =(ch.qos.logback.classic.LoggerContext) LoggerFactory.getILoggerFactory();
if(packageName.equals("-1")) {
// 默認(rèn)值-1在张,更改全局日志級別;否則按傳遞的包名或類名修改日志級別矮慕。
loggerContext.getLogger("root").setLevel(ch.qos.logback.classic.Level.toLevel(level));
} else {
loggerContext.getLogger(packageName).setLevel(ch.qos.logback.classic.Level.valueOf(level));
}
return "success";
}
}