logback动态设置某个类的日志级别
程序员文章站
2022-07-03 16:34:34
...
假设一下,现在有这么个情况:
你调别人的接口出问题了,但是怎么排查都定位不了原因。只能借助更详细的日志信息,这个时候,又不想把全局的日志级别调低,毕竟调低对并发量大的应用来说,瞬间会涌出很多很多日志信息。
最好的情况就是,只调整出问题的那个类的日志级别。那怎么办呢?
于是就有了下面的方案:
定向修改某个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日志信息。
---------------------
作者:常乐_smile
来源:CSDN
原文:https://blog.csdn.net/li396864285/article/details/73998009