Java日志框架——Logback的Filter
2015-08-17 21:48
375 查看
一、作用
在Logback中有两种方法去控制某个日志记录请求是否有效:一种是比较日志记录请求的Level值是否大于等于相应的日志记录类实例的Level值;另外一种是配置Filter类实例,Filter类实例的方法比前一种方法更加灵活和强大,它的关注点可以不仅仅限于Level值的比较,也可以关注记录内容等。
二、分类与配置
Logback中有两类Filter,一类是Regular Filter;另外一类是Turbo Filter。
2.1、Regular Filter
Regular Filter继承实现"ch.qos.logback.core.filter.Filter"类,调用Regular Filter实例能够得到3种结果,分别是“DENY, NEUTRAL和ACCEPT”。Regular Filter实例被绑定在Appender实例上,Appender实例上可以绑定一个Regular Filter实例链。当该Appender实例被调用时,被绑定的Regular Filter实例链中的每个Regular Filter实例会被依次调用,当某个Regular Filter实例被调用返回的结果是"DENY"时,直接拒绝日志记录请求;返回的结果是"ACCEPT"时,直接通过日志记录请求;返回的结果是"NEUTRAL"时,继续调用链中的下一个Regular
Filter实例。
Logback中已经实现的常见的Regular Filter有"ch.qos.logback.classic.filter.LevelFilter","ch.qos.logback.classic.filter.ThresholdFilter","ch.qos.logback.core.filter.EvaluatorFilter"。
2.1.1、ch.qos.logback.classic.filter.LevelFilter
比较日志记录请求的Level值和LevelFilter中配置的Level值,返回LevelFilter中配置的结果值。
配置举例:
2.1.2、ch.qos.logback.classic.filter.ThresholdFilter
比较日志记录请求的Level值和ThresholdFilter中配置的Level值,当日志记录请求的Level值小于ThresholdFilter中配置的Level值,日志记录请求被判定为无效。
配置举例:
2.1.3、ch.qos.logback.core.filter.EvaluatorFilter
EvaluatorFilter中可以配置"groovy evaluation expressions"或者"java evaluation expressions",从而可以更加灵活地确定日志记录请求过滤的条件。条件的内容可以不仅限于Level值,也可以是日志记录内容,日志记录时间,MDC内容等等。
配置举例:
2.2、Turbo Filter
Turbo Filter继承实现"ch.qos.logback.classic.turbo.TurboFilter"类,调用Turbo Filter实例能够得到3种结果,分别是“DENY, NEUTRAL和ACCEPT”。Turbo Filter和Regular Filter主要有两点不同:一个是作用域;另一个是作用时机。
Regular Filter的作用域跟绑定它的Appender的作用域一致,只有当Appender被调用时,绑定在它上面的Regular Filter才能得到调用;而Turbo Filter的作用域是Logback上下文环境中的全局作用域,每个日志记录请求的触发都能引起Turbo Filter的调用。
Regular Filter的作用时机是在“根据日志记录请求(LoggingRequest)得到一个日志记录事件(LoggingEvent)”之后,即彼时已经有“LoggingEvent”生成;Turbo Filter的作用时机是在“根据日志记录请求(LoggingRequest)得到一个日志记录事件(LoggingEvent)”之前,即彼时还没有"LoggingEvent"生成。
Logback中已经实现的常见的Turbo Filter有:"ch.qos.logback.classic.turbo.DuplicateMessageFilter"。
2.2.1、ch.qos.logback.classic.turbo.DuplicateMessageFilter
过滤掉重复记录内容的日志记录请求。
配置举例:
参考文献:
[1]http://logback.qos.ch/manual/filters.html
在Logback中有两种方法去控制某个日志记录请求是否有效:一种是比较日志记录请求的Level值是否大于等于相应的日志记录类实例的Level值;另外一种是配置Filter类实例,Filter类实例的方法比前一种方法更加灵活和强大,它的关注点可以不仅仅限于Level值的比较,也可以关注记录内容等。
二、分类与配置
Logback中有两类Filter,一类是Regular Filter;另外一类是Turbo Filter。
2.1、Regular Filter
Regular Filter继承实现"ch.qos.logback.core.filter.Filter"类,调用Regular Filter实例能够得到3种结果,分别是“DENY, NEUTRAL和ACCEPT”。Regular Filter实例被绑定在Appender实例上,Appender实例上可以绑定一个Regular Filter实例链。当该Appender实例被调用时,被绑定的Regular Filter实例链中的每个Regular Filter实例会被依次调用,当某个Regular Filter实例被调用返回的结果是"DENY"时,直接拒绝日志记录请求;返回的结果是"ACCEPT"时,直接通过日志记录请求;返回的结果是"NEUTRAL"时,继续调用链中的下一个Regular
Filter实例。
Logback中已经实现的常见的Regular Filter有"ch.qos.logback.classic.filter.LevelFilter","ch.qos.logback.classic.filter.ThresholdFilter","ch.qos.logback.core.filter.EvaluatorFilter"。
2.1.1、ch.qos.logback.classic.filter.LevelFilter
比较日志记录请求的Level值和LevelFilter中配置的Level值,返回LevelFilter中配置的结果值。
配置举例:
<configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern> %-4relative [%thread] %-5level %logger{30} - %msg%n </pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="CONSOLE" /> </root> </configuration>
2.1.2、ch.qos.logback.classic.filter.ThresholdFilter
比较日志记录请求的Level值和ThresholdFilter中配置的Level值,当日志记录请求的Level值小于ThresholdFilter中配置的Level值,日志记录请求被判定为无效。
配置举例:
<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>
2.1.3、ch.qos.logback.core.filter.EvaluatorFilter
EvaluatorFilter中可以配置"groovy evaluation expressions"或者"java evaluation expressions",从而可以更加灵活地确定日志记录请求过滤的条件。条件的内容可以不仅限于Level值,也可以是日志记录内容,日志记录时间,MDC内容等等。
配置举例:
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator --> <expression>return message.contains("billing");</expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter> <encoder> <pattern> %-4relative [%thread] %-5level %logger - %msg%n </pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
2.2、Turbo Filter
Turbo Filter继承实现"ch.qos.logback.classic.turbo.TurboFilter"类,调用Turbo Filter实例能够得到3种结果,分别是“DENY, NEUTRAL和ACCEPT”。Turbo Filter和Regular Filter主要有两点不同:一个是作用域;另一个是作用时机。
Regular Filter的作用域跟绑定它的Appender的作用域一致,只有当Appender被调用时,绑定在它上面的Regular Filter才能得到调用;而Turbo Filter的作用域是Logback上下文环境中的全局作用域,每个日志记录请求的触发都能引起Turbo Filter的调用。
Regular Filter的作用时机是在“根据日志记录请求(LoggingRequest)得到一个日志记录事件(LoggingEvent)”之后,即彼时已经有“LoggingEvent”生成;Turbo Filter的作用时机是在“根据日志记录请求(LoggingRequest)得到一个日志记录事件(LoggingEvent)”之前,即彼时还没有"LoggingEvent"生成。
Logback中已经实现的常见的Turbo Filter有:"ch.qos.logback.classic.turbo.DuplicateMessageFilter"。
2.2.1、ch.qos.logback.classic.turbo.DuplicateMessageFilter
过滤掉重复记录内容的日志记录请求。
配置举例:
<configuration> <turboFilter class="chapters.filters.SampleTurboFilter"> <Marker>sample</Marker> </turboFilter> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %-4relative [%thread] %-5level %logger - %msg%n </pattern> </encoder> </appender> <root> <appender-ref ref="STDOUT" /> </root> </configuration>
参考文献:
[1]http://logback.qos.ch/manual/filters.html
相关文章推荐
- java实例 N的阶乘末尾有多少个0
- Java开发中的23种设计模式详解
- 【Java技术位】——代理模式及其事务包
- Eclipse maven 插件之helloword
- JavaEE细节问题05——Cookie和Session
- Spring MVC 教程,快速入门,深入分析
- java 之 语言基础
- JavaEE细节问题04——Servlet细节问题
- Eclipse的JS编辑器响应慢,复制和粘贴时很卡的解决方法
- 学习WebSocket(二):使用Spring WebSocket做一个简单聊天室
- Java Concurrency in Practice——LogService
- 在Java中使用transient
- 基于注解的 Spring MVC 简单入门
- vv_jeffy之spring4.x集成myibatis3.x
- 面向问题编程——Java泛型
- Eclipse初体验
- java双缓冲 笔记
- Spring学习笔记-springMVC基于注解的控制器(Demo)
- 谈谈Java中的集合
- Java学习笔记(十二):泛型的使用