springboot 在线调整日志级别

18 篇文章 0 订阅

WEB应用项目生产环境一般日志级别是ERROR级别,但有时候碰到有问题的时候想看一下DEBUG级别的日志,可能需要项目重启,单个项目还好说,像现在微服务的项目动不动就十几个服务根本无从下手,遂研发出在线变更日志级别功能;

1、要变更级别,先清除原来的级别以及LoggerContext对象

String[] LOGGER_NAME = new String[] {"root"};
        LoggerContext lc = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory();
        //清除日志
        for (String logName : LOGGER_NAME) {
            ch.qos.logback.classic.Logger logger = lc.getLogger(logName);
            logger.detachAppender("CallLogAppender");
            logger.detachAndStopAllAppenders();
            logger.isAdditive();
        }

2、重新设置日志级别

//这里直接对root目录进行所有级别调整,当然也可以视情况写上自己的目录
String[] LOGGER_NAME = new String[] {"root"};
        if (!StringUtils.hasText(level)) {
            level = "";
        }
        level = level.trim();
        CallLogAppender ca = new CallLogAppender();
        ca.setContext(lc);
        ca.setName("CallLogAppender");
        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        encoder.setCharset(UTF_8);
        encoder.setPattern("%date %-5level %logger- %msg%n");
        encoder.setContext(lc);
        encoder.start();
        ca.setEncoder(encoder);
        ca.start();
        for (String logName : LOGGER_NAME) {
            Logger logger = lc.getLogger(logName);
            switch (level.toUpperCase()) {
                case "OFF":
                    logger.setLevel(Level.OFF);
                    break;
				......其它级别类似以上的写法
                default:
                    logger.setLevel(Level.ERROR);
                    break;
            }
            logger.addAppender(ca);
        }

3、application.properties日志级别配置

logging.level.root=debug
logging.level.org.apache=info
logging.level.sun.net=info
logging.level.com.alibaba=info

注意:设置root的目录,那么其它路径不要在application.properties进行配置级别,否则会出现调用接口无法变更级别问题;

把第一个方法封装到Controller中,在前台就能直接调用后台接口进行在线级别变更了,当然微服务应用很多,这个可以通过注册中心获取到所有实例进行遍历,这都是小问题了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值