springboot项目不重启项目修改日志级别
场景:线上某一目录下类的日志打印的日志级别低(如:DEBUG),导致线上打印大量日志。
解决方案一:
修改spring-logback中日志级别,重新发版。
解决方案二:
curl接口
@RequestMapping(value = "/v1/test/log4J/level", method = RequestMethod.GET) public void testLog4JLevel(@RequestParam String levelStr, @RequestParam String path) { if (loggerContext == null) { if (LoggerFactory.getILoggerFactory() instanceof LoggerContext) { loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); } else { logger.warn("无法获取loggerContext, ILoggerFactory 类型异常"); return; } } Level level = Level.toLevel(levelStr, null); if (level == null) { logger.warn("传入了不支持的日志级别"); } // path当前无用到,测试的当前文件的日志打印, logger.info("修改之前INFO级别日志打印了"); logger.debug("修改之前DEBUG级别日志打印了"); Level old = loggerContext.getLogger("com.json.serialize.test.controller").getLevel(); loggerContext.getLogger("com.json.serialize.test.controller").setLevel(level); logger.info("{}的日志级别调整完成,原级别为{},调整为{}", "com.json.serialize.test.controller", old, level); logger.info("修改之后INFO级别日志打印了"); logger.debug("修改之后DEBUG级别日志打印了"); }
解决方案三:
如果使用的是Apollo,在监听器中实现日志级别调整
@Component public class LogLeveloConfigChangeListener implements ConfigChangeListener { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void onChange(ConfigChangeEvent changeEvent) { // 获取对象 if (loggerContext == null) { if (LoggerFactory.getILoggerFactory() instanceof LoggerContext) { loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); } else { logger.warn("无法获取loggerContext, ILoggerFactory 类型异常"); return; } } // for (String key : changeEvent.changedKeys()) { Level level = Level.toLevel(change.getNewValue(), null); if (level == null) { logger.warn("日志级别不支持"); continue; } Level old = loggerContext.getLogger(key).getLevel(); loggerContext.getLogger(loggerName).setLevel(level); } } }