logback动态设置某个类的日志级别

来源:互联网 发布:看卫星电视的软件 编辑:程序博客网 时间:2024/05/29 09:47

假设一下,现在有这么个情况:

你调别人的接口出问题了,但是怎么排查都定位不了原因。只能借助更详细的日志信息,这个时候,又不想把全局的日志级别调低,毕竟调低对并发量大的应用来说,瞬间会涌出很多很多日志信息。

最好的情况就是,只调整出问题的那个类的日志级别。那怎么办呢?


于是就有了下面的方案:

定向修改某个class的logger日志级别。

 public void testLog(String key, String level, String level2){        LoggerContext loggerContext= (LoggerContext) LoggerFactory.getILoggerFactory();        //设置全局日志级别        ch.qos.logback.classic.Logger logger=loggerContext.getLogger("root");        logger.setLevel(Level.toLevel(level));        if (!StringUtils.isBlank(level2)) {            //设置某个类日志级别-可以实现定向日志级别调整            ch.qos.logback.classic.Logger vLogger = loggerContext.getLogger(key);            if (vLogger!=null)                vLogger.setLevel(Level.toLevel(level2));        }        List<ch.qos.logback.classic.Logger> loggerList = loggerContext.getLoggerList();        for (ch.qos.logback.classic.Logger logger1 : loggerList){            log.info(logger1.getName());        }    }


比如:  level = ERROR

     level2 = INFO

     key = "com.duy.soo.web.controller.TestController"

表示把全局日志级别设置为ERROR级别,单独把com.duy.soo.web.controller.TestController类的日志设置为INFO级别。

/** * @Author changle * @Time 17/6/30. * @Desc to do */@Slf4j@Controller@RequestMapping(value = "/api/test")public class TestController {    @RequestMapping("/testDebug")    @ResponseBody    public Response<String> testLog(String key){        //打印日志级别        String rtn = "this is a INFO";        log.info(rtn);        rtn = "this is a ERROR";        log.error(rtn);        rtn = "this is a DEBUG";        log.debug(rtn);        Response<String> response = Response.ok(rtn);        return response;    }}

如此一来,除了com.duy.soo.web.controller.TestController类以外的其他类,都只输出ERROR日志,而TestController类能输出INFO日志信息。

原创粉丝点击