当前位置:   article > 正文

动态修改logback日志级别_logback修改日志级别

logback修改日志级别

背景

应用在线上部署时,一般日志级别会设置为info级别。一些流量高的应用,甚至会设置为error级别。这样日志打的少了,日志文件就不会变的太大,接口的性能也会更高。但缺点也显而易见,出现问题时,由于日志太少,很难定位出问题在哪儿。
今天就介绍一种,可以动态修改日志级别的方法。

需求

我使用一个叫“my_logger”的logger对象输出日志,demo代码如下

	private final Logger logger = LoggerFactory.getLogger("my_logger");

	@ResponseBody
    @RequestMapping(value = "outputLog")
    public String outputLog() {
        logger.debug("我是debug级别的日志,入参是...");
        logger.info("我是info级别的日志...");
        logger.debug("我是debug级别的日志,返回值是...");
        return "success";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

此时请求接口,仅输出一条info级别的日志在这里插入图片描述

改造

【重点】新增一个修改日志级别的接口

排查线上问题时,就调用这个接口,入参可以为:ERROR、WARN、INFO、DEBUG、TRACE

	@ResponseBody
    @PutMapping(value = "level/{logLevel}")
    public String changeLogLevel(@PathVariable("logLevel") String logLevel) {
        try {
            // 1. 获取日志上下文
            LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
            // 2. 修改指定logger对象的日志级别(这里根据你自己的日志名称修改,我的叫"my_logger")
            // 如果修改mybatis、spring框架的日志,写"org.mybatis"、"org.springframework"
            loggerContext.getLogger("my_logger").setLevel(Level.valueOf(logLevel));
            System.out.println("日志级别修改成功!" + logLevel);
        } catch (Exception e) {
            logger.error("动态修改日志级别出错", e);
            return "failure";
        }
        return "success";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

比如我现在改成debug级别在这里插入图片描述
在这里插入图片描述

结果

这个时候,再请求第一个接口,就可以看到debug级别的日志了。在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/599986
推荐阅读
相关标签
  

闽ICP备14008679号