diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/log/controller/LogbackController.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/log/controller/LogbackController.java new file mode 100644 index 0000000000..6dc83f5f5a --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/log/controller/LogbackController.java @@ -0,0 +1,49 @@ +package com.epmet.commons.tools.log.controller; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.Level; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * logback日志级别动态切换 + * 请求路径 .../log/setlevel + * 根据参数(level、packageName),设置某一个包或者具体的某一个类的日志打印级别 + * @Auther: zhangyong + * @Date: 2020-07-03 11:09 + */ + +@RequestMapping("/log") +@RestController +public class LogbackController { + private org.slf4j.Logger log = LoggerFactory.getLogger(LogbackController.class); + + /** + * logback动态修改包名的日志级别 + * @param level 日志级别 + * @param packageName 包名 + * @return 当前的日志级别 + * @throws Exception + */ + @GetMapping("/setlevel") + public String updateLogbackLevel( @RequestParam(value="level") String level, + @RequestParam(value="packageName",defaultValue = "-1") String packageName) throws Exception { + LoggerContext loggerContext =(LoggerContext) LoggerFactory.getILoggerFactory(); + log.info("动态修改日志级别入参, 日志级别level:", level); + log.info("动态修改日志级别入参, 包名packageName:", packageName); + Logger logger= null; + if("-1".equals(packageName)) { + // 默认值-1,更改全局日志级别;否则按传递的包名或类名修改日志级别。 + logger= loggerContext.getLogger("root"); + } else { + logger= loggerContext.getLogger(packageName); + } + logger.setLevel(Level.toLevel(level)); + log.info("动态修改日志级别, 修改后, 当前的日志级别", String.valueOf(logger.getLevel())); + return String.valueOf(logger.getLevel()); + } +}