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

      

     

  • 相关阅读:
    mac 使用指南
    客服系统引用方案
    CSS中margin和padding的区别
    NuGet学习笔记(1)——初识NuGet及快速安装使用
    百度搜索这些词:(百度搜索特效,好玩)
    sql语言:如何查询字符串某个字符的个数?
    Sql日期时间格式转换
    SQL获取当前时间(日期)
    Redis快速入门:初识Redis
    选择Key-Value Store
  • 原文地址:https://www.cnblogs.com/xuesheng/p/15673490.html
Copyright © 2011-2022 走看看