java日志框架系列(9):logback框架过滤器(filter)详解

过滤器放在了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)

原文地址:https://www.cnblogs.com/z-x-p/p/11691170.html

时间: 2024-08-08 05:48:54

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

【甘道夫】HBase(0.96以上版本)过滤器Filter详解及实例代码

说明: 本文参考官方Ref Guide,Developer API和众多博客,并结合实测代码编写,详细总结HBase的Filter功能,并附上每类Filter的相应代码实现. 本文尽量遵从Ref Guide中"9.4. Client Request Filters"的行文顺序,便于读者对比查看,但内容比官方文档更加详实. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/37653177 目录: 引言 -- 参数基础

Servlet中的过滤器Filter详解

转自: http://blog.csdn.net/sd0902/article/details/8395641 web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链. 优点:过滤

过滤器Filter详解

Filter称之为过滤器: WEB开发人员通过Filter技术,对web服务器管理的所有web资源: 例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能. 例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Filter简介: Servlet API中提供了一个Filter接口,开发web应用时, 如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter. 通过Filter技术,开发人员可以实现用户

Servlet之过滤器Filter详解

一.过滤器的基本工作原理 1.过滤器的基本工作原理 过滤器的基本工作原理如图4-8示. 2.过滤器的特点 过滤器具备有以下特点: (1)它是声明式的 (2)它是动态的 (3)它是模块化的 (4)它是可移植的 (5)它是可重用的 (6)它是透明的 二.过滤器的API接口及部署信息 1.javax.servlet.Filter接口 (1)public void init(FilterConfig filterConfig) throws ServletException init()方法执行初始化操

AngularJS 过滤器(Filter) 详解

过滤器(Filter),故名思议,源数据通过特定的规则,转换成需要的数据格式, 这个规则,我们统称为过滤器. AngularJs 的Filter 功能非常强大,并且使用方便.它能够使得页面分组,查询,排序,以及数据转换等操作变的异常简单,同时还可以自定义过滤器实现更复杂的功能. 格式:{{expression | filter}} 或 {{expression | filter1 | filter2 | filter3......}} 或者 {{ expression | filter:argu

HBase(0.96以上版本)过滤器Filter详解及实例代码

说明: 本文参考官方Ref Guide,Developer API和众多博客,并结合实测代码编写,详细总结HBase的Filter功能,并附上每类Filter的相应代码实现. 本文尽量遵从Ref Guide中"9.4. Client Request Filters"的行文顺序,便于读者对比查看,但内容比官方文档更加详实. ***2014年7月18日更新,新增PageFilter和SkipFilter.*** 目录: 引言 -- 参数基础 1. 结构(Structural)过滤器--Fi

java开源框架SpringSide3多数据源配置的方法详解

原创整理不易,转载请注明出处:java开源框架SpringSide3多数据源配置的方法详解 代码下载地址:http://www.zuidaima.com/share/1781579130801152.htm 在SpringSide 3社区中,不断有人提出多数据源配置的问题,但是时至今日却一直没有一个完美的答案.经过一个星期的折腾,我总算搞清楚了在SpringSide 3中配置多数据源的各种困难并加以解决,在这里,特地把我配置SpringSide 3项目中多数据源的过程写出来,与大家分享. 我使用

webservciescxf框架之客户端与服务端实例详解

webservciescxf框架之客户端与服务端实例详解 可以关注我之前发的文章,那是采用jdk发布服务并且使用wsimpor来生成客户端的. 但本文采用的是soap1.2协议,而wsimport仅对soap1.1协议有效,所以,本文采用的是 cxf框架提供的wsdl2java 来生成客户端,如下: wsdl2java -d . http://127.0.0.1/framework?wsdl 另外,需要强调的是wsdl2java工具(axis好像也提供了)既支持soap1.1协议,也支持soap

logback logback.xml常用配置详解(三) &lt;filter&gt;

转自:logback logback.xml常用配置详解(三) <filter> logback 常用配置详解(三) <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY,日志将立即被抛弃不再经过其他过滤器:返回NEUTRAL,有序列表里的下个过滤器过接着处理日志:返回ACCEPT,日志会被立即处理,不再经过剩余过滤器. 过滤器被添加到<Appender> 中,为<

logback logback.xml 常用配置详解

一:根节点 包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当scan为true时,此属性生效.默认的时间间隔为1分钟. debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态.默认值为false. 例如: <configuration scan="true" scan