过滤器放在了logback-classic模块中。

1.logback-classic模块中过滤器

分类(2种):常规过滤器、TurboFilter过滤器。

1.常规过滤器

常规过滤器可以通过自定义进行条件筛选过滤。

目前logback-classic中有2个常规过滤器:级别过滤器(LevelFilter)、临界值过滤器(ThresholdFilter)。在logback-core中还有一个求值过滤器(EvaluatorFilter)。

1.自定义过滤器

创建自定义过滤器很容易,只需要继承Filter抽象类并实现decide()方法。

下面就通过范例来了解如何创建自定义过滤器吧。

1.范例

功能:自定义 SampleFilter 类,当记录事件的消息字段包含字符串“sample”时,它的 decide

方法返回 ACCEPT,其他情况下返回 NEUTRAL。

步骤:(2步)

1.创建继承Filter抽象类的Sample类并实现decide()方法。

2.在xml配置文件中配置过滤器。

定义过滤器SampleFilter,代码如下:

public class SampleFilter extends Filter{

@OverridepublicFilterReply decide(ILoggingEvent event) {if (event.getMessage() != null &&event.getMessage().contains("sample")) {returnFilterReply.ACCEPT;

}else{return FilterReply.NEUTRAL; }

}

}

配置xml配置文件,代码如下:

match就是匹配的意思,那mismatch当然就是不匹配啦。

由于常规过滤器可以根据事件包含的某些信息进行过滤,那么当然可以根据级别进行过滤了。下面介绍一下级别过滤器:

1.级别过滤器(LevelFilter)

级别过滤器xml配置示例:

这个配置表示:当级别为INFO时,decide()方法会响应ACCEPT;否则响应DENY。

标签包含3个子标签: 、 、。

功能: 用于指定过滤的级别。

功能:指定级别匹配时响应的值。值为FilterReply的枚举。

功能:指定级别不匹配时响应的值。值为FilterReply的枚举。

FilterReply的值:ACCEPT 、NEUTRAL、DENY。

2.临界值过滤器(ThresholdFilter)

临界值过滤器xml配置示例:

这个配置表明当级别等于或高于中的子标签指定的级别时,decide()方法会响应NEUTRAL;否则decide方法会响应DENY。

2.TurboFilter过滤器

常用的TurboFilter过滤器(3类):MDCFilter、MarkerFilter、DuplicateFilter。

TurboFilter过滤器与常规过滤器作用范围不同。

常规过滤器Filter作用范围:仅仅是某个logger。如果与这个loggerA关联的appenderB中配置了常规过滤器C,那么每当这个loggerA发起记录请求的时候都会调用这个常规过滤器C。但是未与appenderB关联的logger发起记录请求时无法调用这个常规过滤器C。

TurboFilter过滤器作用范围:整个Logger上下文。就是所有的logger发起记录请求时都会调用这个TurboFilter类型过滤器。

根据他们的作用范围不同,因此我们可以猜测出在配置文件中他们所处的位置肯定是不同的。

过滤器位置

常规过滤器Filter位置:位于appender内。常规过滤器用标签,是的子标签。

TurboFilter过滤器位置:位于configuration内。TurboFilter过滤器用标签,是子标签。

1.自定义TurboFilter过滤器

想要自定义TurboFilter过滤器,必须创建一个类,且该类必须继承TurboFilter抽象类并实现decide()方法。

下面我们通过示例来了解一下如何创建自定义TurboFilter过滤器。

创建并使用自定义TurboFilter过滤器步骤(2步):

1.创建继承TurboFilter抽象类的类SampleTurboFilter。

2.在xml配置文件中配置TurboFilter过滤器。

示例:

packagechapters.filters;importorg.slf4j.Marker;importorg.slf4j.MarkerFactory;importch.qos.logback.classic.Level;importch.qos.logback.classic.Logger;importch.qos.logback.classic.turbo.TurboFilter;importch.qos.logback.core.spi.FilterReply;public class SampleTurboFilter extendsTurboFilter {

String marker;

Marker markerToAccept;

@OverridepublicFilterReply decide(Marker marker, Logger logger, Level level,String format, Object[] params, Throwable t) {if (!isStarted()) {returnFilterReply.NEUTRAL;

}if((markerToAccept.equals(marker))) {returnFilterReply.ACCEPT;

}else{returnFilterReply.NEUTRAL;

}

}publicString getMarker() {returnmarker;

}public voidsetMarker(String markerStr) {this.marker =markerStr;

}

@Overridepublic voidstart() {if (marker != null && marker.trim().length() > 0) {

markerToAccept=MarkerFactory.getMarker(marker);super.start();

}

}

}

上面的 TurboFilter 接受包含特定 marker 的事件。如果上述 marker 未找到,则把任务交给过滤器链里的下一个过滤器。

下面在配置文件中使用自定义的TurboFilter过滤器。 配置文件如下所示:

2.logback-classic中直接使用的TurboFilter过滤器

logback-classic实现的TurboFilter过滤器(2种):MDCFilter、MarkerFilter。

1.MDCFilter过滤器介绍

MDCFilter 类检查在 MDC 里是否存在一个给定值,从而决定响应哪个值(ACCEPT 、NEUTRAL 、DENY)。

配置如下:

注意:标签在标签外面。

2.MarkerFilter过滤器介绍

MarkerFilter会检查与记录事件相关联的某个特定marker是否存在,从而决定响应哪个值(ACCEPT 、NEUTRAL 、DENY)。

配置如下:

3.重复消息过滤器(DuplicateMessageFilter)

重复消息过滤器也是TurboFilter过滤器的一种。

重复消息过滤器的配置如下:

2.logback-core模块中的过滤器

logback-core中只包含了求值过滤器,但是求值过滤器是一个抽象类。

求值过滤器也是有一个常规过滤器。

1.求值过滤器(EvaluatorFilter)

java 日志框架 详解_java日志框架系列(9):logback框架过滤器(filter)详解相关推荐

  1. 过滤器Filter详解

    一.简介 (一)概述        Filter,过滤器,用于在servlet之外对request 和response 进行修改.Filter 有一个 FilterChain 的概念,一个Filter ...

  2. JavaWeb过滤器(Filter)详解,是时候该把过滤器彻底搞懂了(万字说明)

            注意:这篇文章很长,学习完后将会解决你对于过滤器(Filter)的所有疑惑,下面将通过理论和代码的结合来进行讲解演示.....  目录 基本介绍 过滤器原理 过滤器(Filter)接口 ...

  3. java测试类 main方法_Java使用agent实现main方法之前的实例详解

    Java使用agent实现main方法之前的实例详解 创建Agent项目 PreMainExecutor 类,在main方法之前执行此方法 public class PreMainExecutor { ...

  4. java condition详解_Java使用Condition控制线程通信的方法实例详解

    Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...

  5. java图片填充父容器_java相关:spring的父子容器及配置详解

    java相关:spring的父子容器及配置详解 发布于 2020-5-26| 复制链接 本篇文章主要介绍了spring的父子容器及配置详解,详细的介绍了spring父子容器的概念.使用场景和用法,有兴 ...

  6. java list 之详解_java集合(二)List集合之ArrayList详解

    前言: 有序列表,允许存放重复的元素: 实现类: ArrayList:数组实现,查询快,增删慢,轻量级:(线程不安全) LinkedList:双向链表实现,增删快,查询慢 (线程不安全) Vector ...

  7. java中flush函数作用_Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...

  8. java微服务框架有哪些_java中有哪些常见微服务框架

    常见微服务框架介绍: Spring Boot:这可能是最好的Java微服务框架了,它适用于控制反转.面向切面编程等等. 示例代码:import org.springframework.boot.*; ...

  9. java日志与业务分离_java日志分开打印

    log4j.rootLogger=DEBUG,CONSOLE #在生产配置下,请关闭应用于控制台CONSOLE选项,仅启用FILE及可 #待验证是否需要 log4j.additivity.com.un ...

最新文章

  1. 多线程2(常用的方法:join、interrupt、currentThread、isAlive、setDaemon...)
  2. 如何培养一个搞垮团队的Leader?
  3. 常见的几个js笔试题
  4. [UE4]网游中角色Pawn的移动位置同步以及RTS多角色同时移动的解决方案
  5. Win10 安装程序错误2502/2503 拒绝访问 解决
  6. iOS PUSH实现的简单步骤
  7. matlab fig生成exe,MATLAB GUI多个m文件和fig如何生成exe文件
  8. linux 开源谷歌浏览器_开发人员浏览器,Google开源版本等
  9. 架构系列一:大型项目架构演进过程
  10. 博物馆奇妙夜java_博物馆奇妙夜 2 Night At The Museum
  11. php 目录及文件操作
  12. Mysql语句改成Oracle语句的区别
  13. 原来做浏览器这么简单
  14. MongoDB实战-生产环境中分片的部署与配置
  15. Debian/Kali possible missing /lib/firmware/i915.... 的解决办法
  16. 遗传算法之基因型与表现型的相互转换
  17. html5制作线路图,HTML5画一个简单呢好看的电路图
  18. 数商云食品行业数字化供应链转型解决方案
  19. 程序员日常照片大合集!快来大饱眼福!
  20. 将福昕高级PDF编辑器中创建的PDF签名导出,迁移到其他电脑并导入福昕PDF中

热门文章

  1. 【C++】写一个类重载加减乘除取余运算符
  2. VS code配置c环境
  3. 用户描述 和 组描述 和 远程连接
  4. com组件 安全提示_【加粉利器】百度基木鱼通用微信组件上线
  5. windows不能访问linux服务器,window的vnc客户端无法访问Linux服务端的问题之一
  6. 【设计模式】迪米特法则和六种原则的总结
  7. 在腾讯工作半年,我获得了什么?
  8. 玩转springboot:整合JdbcTemplate访问数据库进行操作
  9. 蓝桥杯- 图形显示(java)
  10. web项目的中绝对路径和相对路径