logback动态设置某个类的日志级别
2017-06-30 15:22
1001 查看
假设一下,现在有这么个情况:
你调别人的接口出问题了,但是怎么排查都定位不了原因。只能借助更详细的日志信息,这个时候,又不想把全局的日志级别调低,毕竟调低对并发量大的应用来说,瞬间会涌出很多很多日志信息。
最好的情况就是,只调整出问题的那个类的日志级别。那怎么办呢?
于是就有了下面的方案:
定向修改某个class的logger日志级别。
比如: 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日志信息。
你调别人的接口出问题了,但是怎么排查都定位不了原因。只能借助更详细的日志信息,这个时候,又不想把全局的日志级别调低,毕竟调低对并发量大的应用来说,瞬间会涌出很多很多日志信息。
最好的情况就是,只调整出问题的那个类的日志级别。那怎么办呢?
于是就有了下面的方案:
定向修改某个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日志信息。
相关文章推荐
- 动态设置日志级别
- Logback动态修改日志级别
- C语音日志输出,从zabbix里抽出来的,可以动态设置日志输出级别
- 记一次logback传输日志到logstash根据自定义设置动态创建ElasticSearch索引
- 动态设置log4j的日志级别
- spring-boot 利用 actuator 动态设置 logging 的日志级别
- logback分别将日志记录到数据库和日志文件文件中,且可以独立设置级别
- logback动态修改配置文件实现打印不同级别日志
- 动态切换logback的日志级别
- 20171207学习笔记之Logger日志级别说明及设置方法、说明
- 【MySQL运维】事物隔离级别和行日志格式设置不当导致故障案例 推荐
- log4j设置日志级别
- log4j动态日志级别调整
- 把项目下的jar迁移到tomcat的lib目录下,原本的logback日志配置会失效,产生大量debugger级别日志
- ibatis 如何设置日志debug级别
- logback 设置按天,文件切割大小,总共日志文件大小。
- Hadoop动态调整日志级别
- SpringBoot 使用logback日志分级别生成文件
- 完美解决Spark应用日志级别设置
- JAVA代码如何设置SPARK的日志打印级别