logback使用filter过滤日志操作

作者:justry_deng 时间:2022-07-11 03:20:27 

笔者语录: 我发现我喜欢捣鼓一些小玩意儿,虽然官网(见文末)写得很明白了,但是咱们对感兴趣的部分来敲一遍代码好吧。

过滤器简介:

简介

logback具有过滤器支持。logbcak允许给日志记录器appender配置一个或多个Filter(或者给整体配置一个或多个TurboFilter),来控制:当满足过滤器指定的条件时,才记录日志(或不满足条件时,拒绝记录日志)。logback支持自定义过滤器,当然logback也自带了一些常用的过滤器,在绝大多数时候,自带的过滤器其实就够用了,一般是不需要自定义过滤器的。

logback提供的过滤器支持主要分两大类

ch.qos.logback.core.filter.Filter

logback使用filter过滤日志操作

ch.qos.logback.classic.turbo.TurboFilter

logback使用filter过滤日志操作

过滤器来源说明相对常用
LevelFilterFilter对指定level的日志进行记录(或不记录),对不等于指定level的日志不记录(或进行记录)
ThresholdFilterFilter对大于或等于指定level的日志进行记录(或不记录),对小于指定level的日志不记录(或进行记录)
     提示:info级别是大于debug的
EvaluatorFilterFilter对满足指定表达式的日志进行记录(或不记录),对不满足指定表达式的日志不作记录(或进行记录)
MDCFilterTurboFilter若MDC域中存在指定的key-value,则进行记录,否者不作记录
DuplicateMessageFilterTurboFilter根据配置不记录多余的重复的日志
MarkerFilterTurboFilter针对带有指定标记的日志,进行记录(或不作记录)

若过滤器已经返回了需要记录,那么就一定会对该日志进行记录(不论当前日志的level是否大于等于系统设置的最低日志级别)。

TurboFilter的性能是优于Filter的,这是因为TurboFilter的作用时机是在创建日志事件ILoggingEvent对象之前,而Filter的作用时机是在创建之后。若一个日志注定是会被过滤掉不记录的,那么创建ILoggingEvent对象(包括后续的参数组装方法调用等)这个步骤无疑是非常消耗性能的。

过滤器的FilterReply状态枚举:

对于Filter而言,需不需要记录日志,取决于ch.qos.logback.core.filter.Filter#decide方法的返回:

logback使用filter过滤日志操作

Filter与TurboFilter自带的几种常用过滤器

对于TurboFilter而言,需不需要记录日志,取决于ch.qos.logback.classic.turbo.TurboFilter#decide方法的返回:

logback使用filter过滤日志操作

可以看到,返回的都是FilterReply这个枚举:

logback使用filter过滤日志操作

FilterReply有三种枚举值:

DENY:表示不用看后面的过滤器了,这里就给拒绝了,不作记录。

NEUTRAL:表示需不需要记录,还需要看后面的过滤器。若所有过滤器返回的全部都是NEUTRAL,那么需要记录日志。

ACCEPT:表示不用看后面的过滤器了,这里就给直接同意了,需要记录。

过滤器的使用(示例):

使用LevelFilter的logback.xml(示例):

logback使用filter过滤日志操作

测试一下:

编写测试方法:

logback使用filter过滤日志操作

运行方法,产出日志:

logback使用filter过滤日志操作

使用ThresholdFilter的logback.xml(示例):

logback使用filter过滤日志操作

测试一下:

编写测试方法:

logback使用filter过滤日志操作

运行方法,产出日志:

logback使用filter过滤日志操作

使用EvaluatorFilter的logback.xml(示例):

需要引入额外的解析库依赖janino:


<dependency>
 <groupId>org.codehaus.janino</groupId>
 <artifactId>janino</artifactId>
 <version>3.1.2</version>
</dependency>

logbaxk.xml

logback使用filter过滤日志操作

测试一下:

编写测试方法:

logback使用filter过滤日志操作

运行方法,产出日志:

logback使用filter过滤日志操作

使用MDCFilter的logback.xml(示例):

测试一下:

logback使用filter过滤日志操作

编写测试方法:

logback使用filter过滤日志操作

运行方法,产出日志:

logback使用filter过滤日志操作

自定义过滤器:

自定义Filter:

编写自定义Filter

logback使用filter过滤日志操作

在logback.xml中配置使用此过滤器

logback使用filter过滤日志操作

测试一下:

编写测试方法:

logback使用filter过滤日志操作

运行方法,产出日志:

logback使用filter过滤日志操作

自定义TurboFilter:

编写自定义TurboFilter

logback使用filter过滤日志操作

在logback.xml中配置使用此过滤器

logback使用filter过滤日志操作

测试一下:

编写测试方法:

logback使用filter过滤日志操作

运行方法,产出日志:

logback使用filter过滤日志操作

logback使用filter过滤日志,初步学习完毕!

来源:https://blog.csdn.net/justry_deng/article/details/108074525

标签:logback,filter,过滤日志
0
投稿

猜你喜欢

  • java分页工具类的使用方法

    2023-08-17 02:00:14
  • 使用Swing绘制动态时钟

    2023-11-24 07:05:12
  • SpringBoot之通过BeanPostProcessor动态注入ID生成器案例详解

    2023-11-24 22:17:26
  • C#中HttpWebRequest的用法详解

    2023-06-18 22:39:27
  • SpringCloud Eureka实现服务注册与发现

    2021-10-25 11:41:58
  • SpringMVC利用dropzone组件实现图片上传

    2022-01-19 00:37:00
  • Java中如何动态创建接口的实现方法

    2023-11-25 15:13:02
  • IDEA解决springboot热部署失效问题(推荐)

    2023-08-12 10:40:49
  • 解决SpringBoot框架因post数据量过大没反应问题(踩坑)

    2023-11-28 11:59:30
  • spring中向一个单例bean中注入非单例bean的方法详解

    2022-07-19 13:14:18
  • C# GDI+实现时钟表盘

    2023-06-20 07:11:32
  • java中String字符串删除空格的七种方式

    2023-03-11 05:54:24
  • 详解在Spring中如何自动创建代理

    2023-11-15 15:28:52
  • Java技巧函数方法实现二维数组遍历

    2023-09-12 23:25:00
  • Java设计模式之单例和原型

    2023-11-29 04:14:18
  • Android开发之DrawerLayout实现抽屉效果

    2023-09-30 03:40:59
  • IntelliJ IDEA Run时报“无效的源发行版:16“错误问题及解决方法

    2022-06-04 18:08:35
  • java修改JFrame默认字体方式

    2022-11-16 14:02:50
  • Java经验点滴:类注释文档编写方法

    2023-11-06 03:50:11
  • MyBatis中使用foreach循环的坑及解决

    2023-11-02 12:47:51
  • asp之家 软件编程 m.aspxhome.com