logback使用filter过滤日志操作

 更新时间:2020年09月18日 09:51:07   作者:justry_deng  
这篇文章主要介绍了logback使用filter过滤日志操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

过滤器简介:

简介

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过滤日志,初步学习完毕!

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

相关文章

  • IDEA 2022 中的Lombok 使用基础教程

    IDEA 2022 中的Lombok 使用基础教程

    ​ Lombok是使用java编写的一款开源类库。其主作用是使用注解来代替一些具有格式固定,没有过多技术含量的编码工作,这篇文章主要介绍了IDEA 2022 中的Lombok 使用基础教程,需要的朋友可以参考下
    2022-12-12
  • flowable动态创建多级流程模板实现demo

    flowable动态创建多级流程模板实现demo

    这篇文章主要为大家介绍了flowable动态创建多级流程模板实现demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • java使用Filter实现自动登录的方法

    java使用Filter实现自动登录的方法

    这篇文章主要为大家详细介绍了java使用Filter实现自动登录的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java在长字符串中查找短字符串的实现多种方法

    Java在长字符串中查找短字符串的实现多种方法

    这篇文章主要介绍了Java在长字符串中查找短字符串的实现多种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Spring Cloud Gateway 如何修改HTTP响应信息

    Spring Cloud Gateway 如何修改HTTP响应信息

    这篇文章主要介绍了Spring Cloud Gateway 修改HTTP响应信息的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • IntelliJ IDEA2021.1 配置大全(超详细教程)

    IntelliJ IDEA2021.1 配置大全(超详细教程)

    这篇文章主要介绍了IntelliJ IDEA2021.1 配置大全(超详细教程),需要的朋友可以参考下
    2021-04-04
  • java 压缩和解压缩Zip、Jar、Gzip文件实例代码

    java 压缩和解压缩Zip、Jar、Gzip文件实例代码

    本文主要介绍java压缩和解压缩Zip、Jar、Gzip文件的知识,这里整理了相关资料,并附示例代码有兴趣的小伙伴可以参考下
    2016-09-09
  • java使用gzip实现文件解压缩示例

    java使用gzip实现文件解压缩示例

    这篇文章主要介绍了java使用gzip实现文件解压缩示例,需要的朋友可以参考下
    2014-03-03
  • SpringBoot项目中HTTP请求体只能读一次的解决方案

    SpringBoot项目中HTTP请求体只能读一次的解决方案

    在基于Spring开发Java项目时,可能需要重复读取HTTP请求体中的数据,例如使用拦截器打印入参信息等,但当我们重复调用getInputStream()或者getReader()时,通常会遇到SpringBoot HTTP请求只读一次的问题,本文给出了几种解决方案,需要的朋友可以参考下
    2024-08-08
  • Spring bean配置单例或多例模式方式

    Spring bean配置单例或多例模式方式

    这篇文章主要介绍了Spring bean配置单例或多例模式方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论