Filters
Filters
1、简介
logback 过滤器基于三元逻辑,允许它们组装或者链接在一起组成一个任意复杂的过滤策略。它们在很大程度上受到 Linux iptables 的启发。
在 logback-classic 中,有两种类型的过滤器,regular 过滤器以及 turbo 过滤器。
2、LevelFilter
LevelFilter
基于级别来过滤日志事件。如果事件的级别与配置的级别相等,过滤器会根据配置的 onMatch
与 onMismatch
属性,接受或者拒绝事件。如下是一个简单的示例:
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
3、ThresholdFilter
ThresholdFilter
基于给定的临界值来过滤事件。如果事件的级别等于或高于给定的临界值,当调用 decide()
时,ThresholdFilter
将会返回 NEUTRAL。但是事件的级别低于临界值将会被拒绝。下面是一个简单的例子:
<configuration>
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
4、自定义过滤器
创建一个自己的过滤器非常的简单。只需要继承 Filter
并且实现 decide()
方法就可以了。
如下所示的 SampleFilter 就是一个简单的例子。如果日志事件包含字符 "sample", decide
方法返回 ACCEPT。对于其他的日志事件,则返回 NEUTRAL。
下面是关于将 SampleFilter
添加到 ConsoleAppender
上的配置示例:
Example: SampleFilterConfig.xml
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="chapters.filters.SampleFilter" />
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger - %msg%n
</pattern>
</encoder>
</appender>
<root>
<appender-ref ref="STDOUT" />
</root>
</configuration>
在 logback 配置框架 Joran 的帮助下,为过滤器指定属性或者子组件也变得更加的简单。在过滤器类中添加相应的 set 方法,通过 <filter>
元素嵌套一个以属性命名的 xml 元素中指定属性的值。
通常情况下,过滤器的逻辑由两个正交的部分组成,match/mismatch 的检验以及基于 match/mismatch 的返回值。例如,对于给定的检验,消息等于 "foobar",一个过滤器在 match 的情况下返回 ACCEPT,在 mismatch 的情况下返回 NEUTRAL。另一个过滤可能在 match 的情况下返回 NEUTRAL,在 mismatch 的情况下返回 DENY。
注意这种正交,logback 附带了一个 AbstractMatcherFilter
类,提供了一个有用的骨架用来指定在 match 与 mismatch 情况下的返回值,这两个属性名分别叫做 OnMatch 与 OnMismatch。logback 中大部分的 regular 过滤器都源于 AbstractMatcherFilter
。