• 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);
    
          }
      }
    
    }
    

      

     

  • 相关阅读:
    Robotium源码分析之Instrumentation进阶
    路飞学城Python-Day115
    路飞学城Python-Day114
    路飞学城Python-Day113
    【逻辑回归的特征筛选方法】
    路飞学城Python-Day108
    路飞学城Python-Day107
    【算法学习】神经网络
    路飞学城Python-Day100
    路飞学城Python-Day101
  • 原文地址:https://www.cnblogs.com/xuesheng/p/15673490.html
Copyright © 2020-2023  润新知