java过滤器实现操作日志_logback使用filter过滤日志操作

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

过滤器简介:

简介

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

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

ch.qos.logback.core.filter.Filter

288538847a706c8e1354361bdb3dfc84.png

ch.qos.logback.classic.turbo.TurboFilter

ddcaa73220a2cc9b5e27a15b978cf5d1.png

过滤器

来源

说明

相对常用

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方法的返回:

fd6e14ae1879d83bc1f8b566bb5689cb.png

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

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

2e2812b0ce19d9c17040dceb4e8222b5.png

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

cb9c097a972a8e4ebab3d5099dc6d78c.png

FilterReply有三种枚举值:

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

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

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

过滤器的使用(示例):

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

b8e610f2642c576e6501c1f2b2cd4e46.png

测试一下:

编写测试方法:

626cc63fb2f2ea521098d1c76d9ad893.png

运行方法,产出日志:

9d7a97d7add74d0c8b0d223c20c5278e.png

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

d4e2c9b86cb919b5c58d37e289735114.png

测试一下:

编写测试方法:

2d5eb468640f2c131b9acf1bf8c6df46.png

运行方法,产出日志:

7094c12a7b5251af34b379ce92de26c6.png

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

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

org.codehaus.janino

janino

3.1.2

logbaxk.xml

a4858dc64e29c314324dda07bc0c3e4b.png

测试一下:

编写测试方法:

8bee99cbf0f93c8309f688af98a37a7f.png

运行方法,产出日志:

7469d7536a7ba8c1490d73a81bf2aa9c.png

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

测试一下:

bf7cd33d0f517bbd6375d7e26f7dff6c.png

编写测试方法:

dd692f5a8041ef6858dce47e7bdf2d80.png

运行方法,产出日志:

e56379a5708e78b0ace1b4442dee3323.png

自定义过滤器:

自定义Filter:

编写自定义Filter

b409bc678567a247cbf6755469fc7d61.png

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

7fdd570d0772b074ae5c797edd173824.png

测试一下:

编写测试方法:

5285df359353983f9dd64f7b77497cdf.png

运行方法,产出日志:

826bdc83275dc5084109808655d5e998.png

自定义TurboFilter:

编写自定义TurboFilter

d62a286d50c9b11108773d8fce33ccfd.png

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

e028949f5dcc51eb4c4ef6be40b01274.png

测试一下:

编写测试方法:

b63aa6005c89b0d08733bf71136e077e.png

运行方法,产出日志:

4f054ccda792473b6fcbb102b6e127ee.png

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

以上这篇logback使用filter过滤日志操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值