logback使用filter过滤日志操作
作者:justry_deng 发布时间:2022-07-11 03:20:27
笔者语录: 我发现我喜欢捣鼓一些小玩意儿,虽然官网(见文末)写得很明白了,但是咱们对感兴趣的部分来敲一遍代码好吧。
过滤器简介:
简介
logback具有过滤器支持。logbcak允许给日志记录器appender配置一个或多个Filter(或者给整体配置一个或多个TurboFilter),来控制:当满足过滤器指定的条件时,才记录日志(或不满足条件时,拒绝记录日志)。logback支持自定义过滤器,当然logback也自带了一些常用的过滤器,在绝大多数时候,自带的过滤器其实就够用了,一般是不需要自定义过滤器的。
logback提供的过滤器支持主要分两大类
ch.qos.logback.core.filter.Filter
ch.qos.logback.classic.turbo.TurboFilter
过滤器 | 来源 | 说明 | 相对常用 |
---|---|---|---|
LevelFilter | Filter | 对指定level的日志进行记录(或不记录),对不等于指定level的日志不记录(或进行记录) | 是 |
ThresholdFilter | Filter | 对大于或等于指定level的日志进行记录(或不记录),对小于指定level的日志不记录(或进行记录) 提示:info级别是大于debug的 | 是 |
EvaluatorFilter | Filter | 对满足指定表达式的日志进行记录(或不记录),对不满足指定表达式的日志不作记录(或进行记录) | 是 |
MDCFilter | TurboFilter | 若MDC域中存在指定的key-value,则进行记录,否者不作记录 | 是 |
DuplicateMessageFilter | TurboFilter | 根据配置不记录多余的重复的日志 | 是 |
MarkerFilter | TurboFilter | 针对带有指定标记的日志,进行记录(或不作记录) | 否 |
… | … | … | … |
若过滤器已经返回了需要记录,那么就一定会对该日志进行记录(不论当前日志的level是否大于等于系统设置的最低日志级别)。
TurboFilter的性能是优于Filter的,这是因为TurboFilter的作用时机是在创建日志事件ILoggingEvent对象之前,而Filter的作用时机是在创建之后。若一个日志注定是会被过滤掉不记录的,那么创建ILoggingEvent对象(包括后续的参数组装方法调用等)这个步骤无疑是非常消耗性能的。
过滤器的FilterReply状态枚举:
对于Filter而言,需不需要记录日志,取决于ch.qos.logback.core.filter.Filter#decide方法的返回:
Filter与TurboFilter自带的几种常用过滤器
对于TurboFilter而言,需不需要记录日志,取决于ch.qos.logback.classic.turbo.TurboFilter#decide方法的返回:
可以看到,返回的都是FilterReply这个枚举:
FilterReply有三种枚举值:
DENY:表示不用看后面的过滤器了,这里就给拒绝了,不作记录。
NEUTRAL:表示需不需要记录,还需要看后面的过滤器。若所有过滤器返回的全部都是NEUTRAL,那么需要记录日志。
ACCEPT:表示不用看后面的过滤器了,这里就给直接同意了,需要记录。
过滤器的使用(示例):
使用LevelFilter的logback.xml(示例):
测试一下:
编写测试方法:
运行方法,产出日志:
使用ThresholdFilter的logback.xml(示例):
测试一下:
编写测试方法:
运行方法,产出日志:
使用EvaluatorFilter的logback.xml(示例):
需要引入额外的解析库依赖janino:
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.1.2</version>
</dependency>
logbaxk.xml
测试一下:
编写测试方法:
运行方法,产出日志:
使用MDCFilter的logback.xml(示例):
测试一下:
编写测试方法:
运行方法,产出日志:
自定义过滤器:
自定义Filter:
编写自定义Filter
在logback.xml中配置使用此过滤器
测试一下:
编写测试方法:
运行方法,产出日志:
自定义TurboFilter:
编写自定义TurboFilter
在logback.xml中配置使用此过滤器
测试一下:
编写测试方法:
运行方法,产出日志:
logback使用filter过滤日志,初步学习完毕!
来源:https://blog.csdn.net/justry_deng/article/details/108074525


猜你喜欢
- 效果图接下来就是一波贴代码的过程自定义Dialogpublic class SinaSendView extends Dialog { &n
- 本文实例讲述了Android实现拍照上传功能的方法。分享给大家供大家参考,具体如下:1、LoginWindow.java --登录窗口pac
- 原理:使用Popup控件,并且设置Popup控件的位置居中。1:新建自定义控件PopupBorder,作为Popup的child。代码如下:
- 这篇文章主要介绍了如何使用mybatis-generator自动生成代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 本文为大家分享了java多线程的简单实现及线程池实例,供大家参考,具体内容如下一、多线程的两种实现方式1、继承Thread类的多线程/**
- 一、材料准备1、jdk1.8的安装包2、maven安装包3、idea工具二、配置jdk1.8环境变量1.jdk下载jdk下载网址(点击此链接
- try &
- Android ScrollView无法填充满屏幕的解决办法ScrollView滚动视图是指当拥有很多内容、屏幕显示不完时、需要通过滚动跳来
- 这篇文章主要介绍了SpringBoot整合Druid数据源过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 本文实例讲述了C#反射应用。分享给大家供大家参考。具体如下:通过反射实现多系统数据库的配置通过定义接口,反射实例化配置的节点的值配置App.
- JdbcTemplate概述它是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了
- 0. Grinder – Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提
- 问题描述本来开发工具安装的是IDEA2018,有天用着用着突然崩溃了,重启后死活用不了。心血来潮下载了2019版本,顺利安装完,但是点击快捷
- 关闭 IDEA 的自动检查更新(截图idea 2020 2.x)idea 右下角会有这样的更新提示2. 关闭 idea 自动检查更新取消勾选
- 1、对称二叉树【OJ链接】分为以下几种情况:二叉树为空,是对称二叉树二叉树不为空,其左子树或者右子树为空,不是对称二叉树二叉树不为空,左右子
- 文档中的设置有序或无序列表是一种反应内容上下级关系或者内容相同属性的方式,与单纯的文字叙述相比,它能有效增强文档内容的条理性,突出重点。因此
- 1、什么是过滤器?在客户端到服务器的过程中,当发送请求时,如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行,在服务器给客户
- 马云说:“未来最大的资源就是数据,不参与大数据十年后一定会后悔。”毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对
- 算法文章,总是带给我们无穷的思考和兴趣,一个问题,多种解决方法,看你如何去思考它,对于标题所引出的问题,我觉得,使用递归是比较有效的方法,当
- 本文实例讲述了Java删除二叉搜索树最大元素和最小元素的方法。分享给大家供大家参考,具体如下:在前面一篇《Java二叉搜索树遍历操作》中完成