博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Logback中使用TurboFilter实现日志级别等内容的动态修改
阅读量:6324 次
发布时间:2019-06-22

本文共 1516 字,大约阅读时间需要 5 分钟。

可能看到这个标题,读者会问:要修改日志的级别,不是直接修改log.xxx就好了吗?为何要搞那么复杂呢?所以,先说一下场景,为什么要通过TurboFilter去动态的修改日志级别。我们在使用Java开发各种项目的时候必然的会引入很多框架,这些框架通过堆叠的方式完成所要提供的业务服务(一个服务请求在进入后会在这些框架中兜一圈,然后返回结果),当一个比较底层的框架在处理过程中抛出了异常之后,这个异常会不断的向上传递。这个时候,有的框架直接throw,继续向上抛,而有的在throw之前还会自己打印一下error日志,这就导致了当出现异常的时候,往往会出现一连串类似的错误日志记录。如果对接了错误日志告警,就会出现重复告警的现象。为了解决类似这样的问题,修改源码重新编译最直接,但是不可取。所以希望可以有更好的手段去控制这些已经被编码固化的日志打印信息。当我们使用Logback的时候,TurboFilter就是解决该问题的工具之一。

TurboFIlter不同于之前在[《Logback中如何自定义灵活的日志过滤规则》]一文中介绍的那些通过ch.qos.logback.core.filter.Filter接口实现的过滤器。ch.qos.logback.core.filter.Filter实现的过滤器是与Appender绑定的,而TurboFIlter是与日志上下文绑定的,它会过滤所有的日志请求,并且TurboFIlter的方法中提供了丰富的可访问信息用来进行控制和改写。

比如下面的实现,通过继承ch.qos.logback.classic.turbo.TurboFilter类,并重写decide方法,将org.springframework.cloud.sleuth.instrument.web.ExceptionLoggingFilter类中原本要打印的ERROR日志DENY掉(过滤掉),同时以WARN级别打印一封相同的内容,这样就实现了对已定义日志的动态修改。

public class ForceWarnFilter extends TurboFilter {    @Override    public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable throwable) {        if (level == Level.ERROR && logger.getName().equals("org.springframework.cloud.sleuth.instrument.web.ExceptionLoggingFilter")) {            logger.warn(marker, format, params);            return FilterReply.DENY;        }        return FilterReply.NEUTRAL;    }}

为了让上面定义的过滤器生效,需要在logback的配置xml中增加如下配置:

......

或者也可以在应用主类中增加:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();lc.addTurboFilter(new MyTurboFilter());

更多关于Logback过滤器的内容可参考官方文档:

转载地址:http://nvmaa.baihongyu.com/

你可能感兴趣的文章
《Total Commander:万能文件管理器》——第3章. TC基本功-定位与选择 第3.1节.安装原版TC,回归朴素界面...
查看>>
《ANSYS Workbench 14有限元分析自学手册》——第 1 章 ANSYS orkbench 14基础 1.1 ANSYS Workbench概述...
查看>>
JCP EC 投票否决 Java 模块化系统
查看>>
《Storm企业级应用:实战、运维和调优》——2.3 安装部署Storm集群
查看>>
比特币交易平台MtGox收到美国传票,日本着手调查
查看>>
Shashlik:Linux 上运行 Android 应用的新法子
查看>>
《精解Windows8》——2.13 常用快捷键
查看>>
《Greenplum企业应用实战》一1.2 OLTP与OLAP
查看>>
《初级会计电算化实用教程(金蝶KIS专业版)》一1.4 会计核算软件
查看>>
2、MyEclipse和Eclipse调优,MyEclipse配置(tomcat和jdk的内存设置),jar引入相关知识点,将Java项目编程web项目的办法...
查看>>
Java核心技术卷I基础知识1.2.8 解释型
查看>>
《编程珠玑(第2版•修订版)》—第1章1.5节原理
查看>>
《JUnit实战(第2版)》—— 2.3 JUnit的测试运行器
查看>>
Linux有问必答:如何为sudo命令定义PATH环境变量
查看>>
《Python数据分析》一2.8 花式索引
查看>>
The Log: What every software engineer should know about real-time data's unifying abstraction
查看>>
写一个简单的工作流(三)
查看>>
在CentOS 6.4中支持exfat格式的U盘
查看>>
RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享
查看>>
几行代码解决淘宝面试题之Clojure版
查看>>