您的位置:首页 > 其它

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

2017-06-30 15:22 1001 查看
假设一下,现在有这么个情况:

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

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

于是就有了下面的方案:

定向修改某个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日志信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息