zoukankan      html  css  js  c++  java
  • 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);
    
          }
      }
    
    }
    

      

     

  • 相关阅读:
    JMeter参数签名——Groovy工具类形式
    arthas进阶thread命令视频演示
    疫情期间,如何提高远程办公效率
    Groovy中的闭包
    arthas快速入门视频演示
    绑定手机号性能测试
    基于HTTP请求的多线程实现类--视频讲解
    合格的测试经理必备技能
    Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My
    Navicat Premium怎么设置字段的唯一性(UNIQUE)?
  • 原文地址:https://www.cnblogs.com/xuesheng/p/15673490.html
Copyright © 2011-2022 走看看