过滤器放在了logback-classic模块中。
1.logback-classic模块中过滤器
分类(2种):常规过滤器、TurboFilter过滤器。
1.常规过滤器
常规过滤器可以通过自定义进行条件筛选过滤。
目前logback-classic中有2个常规过滤器:级别过滤器(LevelFilter)、临界值过滤器(ThresholdFilter)。在logback-core中还有一个求值过滤器(EvaluatorFilter)。
1.自定义过滤器
创建自定义过滤器很容易,只需要继承Filter抽象类并实现decide()方法。
下面就通过范例来了解如何创建自定义过滤器吧。
1.范例
public class SampleFilter extends Filter{ @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。
FilterReply的值:ACCEPT 、NEUTRAL、DENY。
2.临界值过滤器(ThresholdFilter)
临界值过滤器xml配置示例:
这个配置表明当级别等于或高于
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过滤器。
示例:
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过滤器。 配置文件如下所示:
2.logback-classic中直接使用的TurboFilter过滤器
logback-classic实现的TurboFilter过滤器(2种):MDCFilter、MarkerFilter。
1.MDCFilter过滤器介绍
2.logback-core模块中的过滤器
logback-core中只包含了求值过滤器,但是求值过滤器是一个抽象类。
求值过滤器也是有一个常规过滤器。
1.求值过滤器(EvaluatorFilter)