介绍
对输出日志进行过滤。过滤器将返回ACCEPT, DENY 或者NEUTRAL其中一个, 以确定日志如何输出。
过滤器可以配置在4个地方:
1、上下文范围的过滤器直接在configuration中配置。
2、日志记录器过滤器是在指定的Logger中配置。
3、Appender过滤器用于确定特定的Appender是否应该处理事件的格式和输出。
4、Appender引用过滤器用于确定日志记录器是否应该将事件路由到Appender。
BurstFilter
BurstFilter提供了一种机制,通过在达到最大限制后静默地丢弃事件来控制处理logevent的速度。
配置参数:
参数名 | 类型 | 描述 |
---|---|---|
level | String | 要筛选的消息级别。如果超过maxBurst,则将过滤掉此级别或以下的任何内容。默认值是WARN,这意味着任何高于WARN的消息都将被记录,无论Burst的大小如何。 |
rate | float | 每秒可以执行的事件平均数量。 |
maxBurst | integer | 最大的处理事件,默认是rate的10倍。 |
onMatch | String | 过滤器匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是NEUTRAL。 |
onMismatch | String | 当过滤器不匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是DENY。 |
示例:
<BurstFilter level="INFO" rate="16" maxBurst="100"/>
CompositeFilter
复合过滤器提供了一种指定多个过滤器的方法。他以Filters元素加入到配置中,元素里面可以配置多个过滤器。该元素不支持添加参数。
示例:
<Filters>
<MarkerFilter marker="EVENT" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<DynamicThresholdFilter key="loginId" defaultThreshold="ERROR"
onMatch="ACCEPT" onMismatch="NEUTRAL">
<KeyValuePair key="User1" value="DEBUG"/>
</DynamicThresholdFilter>
</Filters>
DynamicThresholdFilter
可以通过明确的属性对不同的日志级别进行拦截。例如,可以通过ThreadContext对指定用户输出不同的日志级别。如果日志事件不包含指定的ThreadContext项,那么默认使用NEUTRAL。
配置参数:
参数名 | 类型 | 描述 |
---|---|---|
key | String | 去ThreadContext中比较的key |
defaultThreshold | String | 需要被过滤的消息等级。当指定的key不在ThreadContext中时,使用该配置。 |
keyValuePair | KeyValuePair[] | 可以定义多个KeyValuePair属性。通过该属性可以对指定用户设置日志级别。KeyValuePair的key为ThreadContext中获取的value值,KeyValuePair的value为日志的级别,如<KeyValuePair key="User1" value="DEBUG"/> |
onMatch | String | 过滤器匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是NEUTRAL。 |
onMismatch | String | 当过滤器不匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是DENY。 |
示例:
<DynamicThresholdFilter key="loginId" defaultThreshold="ERROR"
onMatch="ACCEPT" onMismatch="NEUTRAL">
<KeyValuePair key="User1" value="DEBUG"/>
</DynamicThresholdFilter>
MapFilter
MapFilter允许对MapMessage中的数据元素进行过滤。
配置参数:
参数名 | 类型 | 描述 |
---|---|---|
operator | String | 如果配置为or,那么只要有一个匹配就可以了。否则所有的key/value都要匹配。 |
keyValuePair | KeyValuePair[] | 可以定义一个或多个KeyValuePair元素,这些元素定义映射中的键和要匹配的值。如果同一个key被多次指定,那么对该key的检查将自动成为“or”,因为映射只能包含一个值。 |
onMatch | String | 过滤器匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是NEUTRAL。 |
onMismatch | String | 当过滤器不匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是DENY。 |
示例1:
<MapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
<KeyValuePair key="eventId" value="Login"/>
<KeyValuePair key="eventId" value="Logout"/>
</MapFilter>
示例2
<Root level="error">
<MapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
<KeyValuePair key="eventId" value="Login"/>
<KeyValuePair key="eventId" value="Logout"/>
</MapFilter>
<AppenderRef ref="RollingFile">
</AppenderRef>
</Root>
示例3:
<Root level="error">
<AppenderRef ref="RollingFile">
<MapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
<KeyValuePair key="eventId" value="Login"/>
<KeyValuePair key="eventId" value="Logout"/>
</MapFilter>
</AppenderRef>
</Root>
MarkerFilter
MarkerFilter将配置的标记值与LogEvent中包含的标记进行比较。当标记名称与日志事件的标记匹配,或者与其任一父标记匹配时,则将进行匹配。
配置参数:
参数名 | 类型 | 描述 |
---|---|---|
marker | String | 要比较的标记名称。 |
onMatch | String | 过滤器匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是NEUTRAL。 |
onMismatch | String | 当过滤器不匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是DENY。 |
示例:
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
RegexFilter
RegexFilter将格式化或未格式化的消息与正则表达式进行比较。
配置参数:
参数名 | 类型 | 描述 |
---|---|---|
regex | String | 正则表达式 |
useRawMsg | boolean | 如果为true,将使用未格式化的消息,否则将使用格式化的消息。默认值为false。 |
onMatch | String | 过滤器匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是NEUTRAL。 |
onMismatch | String | 当过滤器不匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是DENY。 |
示例:
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<RegexFilter regex=".* test .*" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
ScriptFilter
ScriptFilter执行一个返回true或false的脚本。
配置参数:
参数名 | 类型 | 描述 |
---|---|---|
script | Script, ScriptFile or ScriptRef | 指定需要执行的脚本 |
onMatch | String | 过滤器匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是NEUTRAL。 |
onMismatch | String | 当过滤器不匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是DENY。 |
Script参数:
参数名 | 类型 | 描述 |
---|---|---|
configuration | Configuration | 拥有此ScriptFilter的配置。 |
level | Level | 事件关联的日志级别。仅在配置为全局过滤器时显示。 |
loggerName | String | 日志记录器的名称。仅在配置为全局过滤器时显示。 |
logEvent | LogEvent | 正在处理的日志事件。全局过滤器配置不存在时使用。 |
marker | Marker | 如果有日志调用,则将标记传递给日志调用。仅在配置为全局过滤器时显示。 |
message | Message | 与日志调用关联的消息。仅在配置为全局过滤器时显示。 |
parameters | Object[] | 传递给日志调用的参数。仅在配置为全局过滤器时显示。有些消息将参数作为消息的一部分。 |
throwable | Throwable | 如果有日志调用,则将Throwable传递给日志调用。仅在配置为全局过滤器时显示。 |
substitutor | StrSubstitutor | 用于替换查找变量。 |
示例:
<Scripts>
<ScriptFile name="filter.js" language="JavaScript" path="src/test/resources/scripts/filter.js" charset="UTF-8" />
<ScriptFile name="filter.groovy" language="groovy" path="src/test/resources/scripts/filter.groovy" charset="UTF-8" />
</Scripts>
<Logger name="TestJavaScriptFilter" level="trace" additivity="false">
<AppenderRef ref="List">
<ScriptFilter onMatch="ACCEPT" onMisMatch="DENY">
<ScriptRef ref="filter.js" />
</ScriptFilter>
</AppenderRef>
</Logger>
示例2:
StructuredDataFilter
StructuredDataFilter是一个MapFilter,它还允许过滤事件id、类型和消息。
示例:
<StructuredDataFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
<KeyValuePair key="id" value="Login"/>
<KeyValuePair key="id" value="Logout"/>
</StructuredDataFilter>
ThreadContextMapFilter (or ContextMapFilter)
ThreadContextMapFilter或ContextMapFilter允许对当前上下文中的数据元素进行过滤。默认情况下,这是ThreadContext映射。
示例:
<ContextMapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
<KeyValuePair key="User1" value="DEBUG"/>
<KeyValuePair key="User2" value="WARN"/>
</ContextMapFilter>
示例2:
<Root level="error">
<AppenderRef ref="RollingFile"/>
<ContextMapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
<KeyValuePair key="foo" value="bar"/>
<KeyValuePair key="User2" value="WARN"/>
</ContextMapFilter>
</Root>
ThresholdFilter
如果配置的level与日志记录器中一样或者高于日志级别,那么使用onMatch的配置,否则使用onMismatch的配置。例如,如果ThresholdFilter配置的日志级别为ERROR,日志记录器配置了DEBUG,那么onMismatch将被返回。因为ERROR比DEBUG更加明确。
配置参数:
参数名 | 类型 | 描述 |
---|---|---|
level | String | 要匹配的有效级别名称 |
onMatch | String | 过滤器匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是NEUTRAL。 |
onMismatch | String | 当过滤器不匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是DENY。 |
示例:
<ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>
TimeFilter
时间过滤器可用于将过滤限制在一天的特定部分
配置参数:
参数名 | 类型 | 描述 |
---|---|---|
start | String | 开始时间,格式为:HH??ss。 |
end | String | 结束时间,格式为:HH??ss。如果结束时间小于开始时间,那么将没有日志输出。 |
timezone | String | 比较时使用的时区。 |
onMatch | String | 过滤器匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是NEUTRAL。 |
onMismatch | String | 当过滤器不匹配时要采取的操作。可以是ACCEPT、DENY、NEUTRAL,默认是DENY。 |
示例:
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="DENY"/>
注意:本文归作者所有,未经作者允许,不得转载