过滤器放在了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<ILoggingEvent> {
@Override
public FilterReply decide(ILoggingEvent event) {
if (event.getMessage() != null && event.getMessage().contains("sample")) {
        return FilterReply.ACCEPT;
     } else {
        return FilterReply.NEUTRAL; }
  }
}

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

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

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

1.级别过滤器(LevelFilter)

级别过滤器xml配置示例:

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

<filter>标签包含3个子标签:<level> 、<onMatch> 、<onMismatch>。

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

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

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

FilterReply的值:ACCEPT 、NEUTRAL、DENY。

2.临界值过滤器(ThresholdFilter)

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

这个配置表明当级别等于或高于<filter>中的子标签<level>指定的级别时,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内。常规过滤器用<filter>标签,是<appender>的子标签。

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

1.自定义TurboFilter过滤器

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

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

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

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

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

示例:

package chapters.filters;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.turbo.TurboFilter;
import ch.qos.logback.core.spi.FilterReply;
public class SampleTurboFilter extends TurboFilter {
  String marker;
  Marker markerToAccept;
  @Override
  public FilterReply decide(Marker marker, Logger logger, Level level,String format, Object[] params, Throwable t) {
    if (!isStarted()) {
      return FilterReply.NEUTRAL;
    }
    if ((markerToAccept.equals(marker))) {
      return FilterReply.ACCEPT;
    } else {
      return FilterReply.NEUTRAL;
    }
  }
  public String getMarker() {
    return marker;
  }
  public void setMarker(String markerStr) {
    this.marker = markerStr;
  }
  @Override
  public void start() {
    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)。
配置如下:

注意:<turboFilter>标签在<appender>标签外面。

2.MarkerFilter过滤器介绍

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

配置如下:

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

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

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

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

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

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

1.求值过滤器(EvaluatorFilter)

java日志框架系列(9):logback框架过滤器(filter)详解的更多相关文章

  1. Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计

    在对IoC有了初步的认知后,我们开始对IOC的实现原理进行深入理解.本文将帮助你站在设计者的角度去看IOC最顶层的结构设计.@pdai Spring框架系列(6) - Spring IOC实现原理详解 ...

  2. Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程

    上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...

  3. Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)

    上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...

  4. Spring框架系列(9) - Spring AOP实现原理详解之AOP切面的实现

    前文,我们分析了Spring IOC的初始化过程和Bean的生命周期等,而Spring AOP也是基于IOC的Bean加载来实现的.本文主要介绍Spring AOP原理解析的切面实现过程(将切面类的所 ...

  5. Spring框架系列(10) - Spring AOP实现原理详解之AOP代理的创建

    上文我们介绍了Spring AOP原理解析的切面实现过程(将切面类的所有切面方法根据使用的注解生成对应Advice,并将Advice连同切入点匹配器和切面类等信息一并封装到Advisor).本文在此基 ...

  6. Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现

    我们在前文中已经介绍了SpringAOP的切面实现和创建动态代理的过程,那么动态代理是如何工作的呢?本文主要介绍Cglib动态代理的案例和SpringAOP实现的原理.@pdai Spring框架系列 ...

  7. Spring框架系列(12) - Spring AOP实现原理详解之JDK代理实现

    上文我们学习了SpringAOP Cglib动态代理的实现,本文主要是SpringAOP JDK动态代理的案例和实现部分.@pdai Spring框架系列(12) - Spring AOP实现原理详解 ...

  8. SpringMVC 框架系列之组件概述与配置详解

    在上一篇文章 SpringMVC 框架系列之初识与入门实例 的实例中,我们已经知道,SpringMVC 框架是一个 web 层的框架,本篇文章就详细解释一下 SpringMVC 框架具体文件的配置以及 ...

  9. java Web 过滤器Filter详解

    简介 Filter也称之为过滤器,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊 ...

  10. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

随机推荐

  1. 全栈开发工程师微信小程序-下

    app.json { "pages": ["pages/index/index"] } index.wxml <text>Hello World&l ...

  2. 解决Navicat无法连接到centos上的MySQL,但命令行可以,修改权限,MySQL密码权限受限:ERROR 1820 (HY000) ERROR 1819 (HY000)

    问题分析 查看MySQL文档发现5.7版本后加入了对用户密码严格的管理规范,具体设置字段如下: validate_password_dictionary_file #插件用于验证密码强度的字典文件路径 ...

  3. 10月清北学堂培训 Day 6

    今天是黄致焕老师的讲授~ T1 自信 AC 莫名 80 pts???我还是太菜了!! 对于每种颜色求出该颜色的四个边界,之后枚举边界构成的矩阵中每个元素,如果不等于该颜色就标记那种颜色不能最先使用. ...

  4. Linux 网络性能测试工具 iperf 的安装和使用

    简介:Iperf是一个网络性能测试工具.可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失.Iperf在Linux和windows平台 ...

  5. PHP开发高可用高安全App后端☆

    第1章 本章先讲解课程所含技术点,并演示相关的项目,让小伙伴对课程有个初步的认知,然后再带领小伙伴进行功能的分析,表的ER总关系图 第2章本章主要讲解课程的一些准备工作知识.包括工具.环境.模板等. ...

  6. Linux之jq

    什么是jq?jq是Linux下面把文本字符串格式化成json格式的工具 系统环境:centos 7 一.安装 (1)yum安装 a.安装epel源 # wget http://dl.fedorapro ...

  7. Js 之生成二维码插件(jquery.qrcode.js)

    一.下载 链接:https://pan.baidu.com/s/1cMjaCYQ_buZNT5XRRjuNTA提取码:myqm 二.效果图 三.代码 <!DOCTYPE html> < ...

  8. Coherent Calculator

    计算逻辑 输入想要的参数后点击以下按钮进行计算和调整: Formula Bigger N Smaller N Bigger M Smaller M 所以在这个策略中Ft被Fixed在输入的值,其他的三 ...

  9. LC 375. Guess Number Higher or Lower II

    We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...

  10. 002-创建型-05-原型模式(Protype)

    一.概述 指原型实例指定创建对象的种类,并通过克隆这些原型创建新的对象 原型模式就是让类实现Cloneable接口,达到克隆原型类的方式. 1.1.适用场景 1.在创建对象的时候,我们不只是希望被创建 ...