今天一早,还没起床,拿起手机赫然看到一个头条信息,标题着实让我心理咯噔了一下!
马上起床,直奔官网(https://logback.qos.ch/news.html),看看到底什么问题?塌的有多厉害?
既然是1.2.9版本以下问题,那就直接找到1.2.9版本修复了些啥,一看是12月16日发布的,已经有几天了,初步判断,应该问题不大吧?
今天一早,还没起床,拿起手机赫然看到一个头条信息,标题着实让我心理咯噔了一下!
马上起床,直奔官网(https://logback.qos.ch/news.html),看看到底什么问题?塌的有多厉害?
既然是1.2.9版本以下问题,那就直接找到1.2.9版本修复了些啥,一看是12月16日发布的,已经有几天了,初步判断,应该问题不大吧?
可能看到这个标题,读者会问:要修改日志的级别,不是直接修改log.xxx就好了吗?为何要搞那么复杂呢?所以,先说一下场景,为什么要通过TurboFilter去动态的修改日志级别。我们在使用Java开发各种项目的时候必然的会引入很多框架,这些框架通过堆叠的方式完成所要提供的业务服务(一个服务请求在进入后会在这些框架中兜一圈,然后返回结果),当一个比较底层的框架在处理过程中抛出了异常之后,这个异常会不断的向上传递。这个时候,有的框架直接throw,继续向上抛,而有的在throw之前还会自己打印一下error日志,这就导致了当出现异常的时候,往往会出现一连串类似的错误日志记录。如果对接了错误日志告警,就会出现重复告警的现象。为了解决类似这样的问题,修改源码重新编译最直接,但是不可取。所以希望可以有更好的手段去控制这些已经被编码固化的日志打印信息。当我们使用Logback的时候,TurboFilter就是解决该问题的工具之一。
当我们需要对日志的打印要做一些范围的控制的时候,通常都是通过为各个Appender设置不同的Filter配置来实现。在Logback中自带了两个过滤器实现:ch.qos.logback.classic.filter.LevelFilter
和ch.qos.logback.classic.filter.ThresholdFilter
,用户可以根据需要来配置一些简单的过滤规则,下面先简单介绍一下这两个原生的基础过滤器。
ch.qos.logback.classic.filter.LevelFilter
过滤器的作用是通过比较日志级别来控制日志输出。下面是一个只记录日志级别为ERROR的例子: