java 日志框架 详解_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{
@OverridepublicFilterReply decide(ILoggingEvent event) {if (event.getMessage() != null &&event.getMessage().contains("sample")) {returnFilterReply.ACCEPT;
}else{return FilterReply.NEUTRAL; }
}
}
配置xml配置文件,代码如下:
match就是匹配的意思,那mismatch当然就是不匹配啦。
由于常规过滤器可以根据事件包含的某些信息进行过滤,那么当然可以根据级别进行过滤了。下面介绍一下级别过滤器:
1.级别过滤器(LevelFilter)
级别过滤器xml配置示例:
这个配置表示:当级别为INFO时,decide()方法会响应ACCEPT;否则响应DENY。
标签包含3个子标签: 、 、。
功能: 用于指定过滤的级别。
功能:指定级别匹配时响应的值。值为FilterReply的枚举。
功能:指定级别不匹配时响应的值。值为FilterReply的枚举。
FilterReply的值:ACCEPT 、NEUTRAL、DENY。
2.临界值过滤器(ThresholdFilter)
临界值过滤器xml配置示例:
这个配置表明当级别等于或高于中的子标签指定的级别时,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内。常规过滤器用标签,是的子标签。
TurboFilter过滤器位置:位于configuration内。TurboFilter过滤器用标签,是子标签。
1.自定义TurboFilter过滤器
想要自定义TurboFilter过滤器,必须创建一个类,且该类必须继承TurboFilter抽象类并实现decide()方法。
下面我们通过示例来了解一下如何创建自定义TurboFilter过滤器。
创建并使用自定义TurboFilter过滤器步骤(2步):
1.创建继承TurboFilter抽象类的类SampleTurboFilter。
2.在xml配置文件中配置TurboFilter过滤器。
示例:
packagechapters.filters;importorg.slf4j.Marker;importorg.slf4j.MarkerFactory;importch.qos.logback.classic.Level;importch.qos.logback.classic.Logger;importch.qos.logback.classic.turbo.TurboFilter;importch.qos.logback.core.spi.FilterReply;public class SampleTurboFilter extendsTurboFilter {
String marker;
Marker markerToAccept;
@OverridepublicFilterReply decide(Marker marker, Logger logger, Level level,String format, Object[] params, Throwable t) {if (!isStarted()) {returnFilterReply.NEUTRAL;
}if((markerToAccept.equals(marker))) {returnFilterReply.ACCEPT;
}else{returnFilterReply.NEUTRAL;
}
}publicString getMarker() {returnmarker;
}public voidsetMarker(String markerStr) {this.marker =markerStr;
}
@Overridepublic voidstart() {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)。
配置如下:
注意:标签在标签外面。
2.MarkerFilter过滤器介绍
MarkerFilter会检查与记录事件相关联的某个特定marker是否存在,从而决定响应哪个值(ACCEPT 、NEUTRAL 、DENY)。
配置如下:
3.重复消息过滤器(DuplicateMessageFilter)
重复消息过滤器也是TurboFilter过滤器的一种。
重复消息过滤器的配置如下:
2.logback-core模块中的过滤器
logback-core中只包含了求值过滤器,但是求值过滤器是一个抽象类。
求值过滤器也是有一个常规过滤器。
1.求值过滤器(EvaluatorFilter)
java 日志框架 详解_java日志框架系列(9):logback框架过滤器(filter)详解相关推荐
- 过滤器Filter详解
一.简介 (一)概述 Filter,过滤器,用于在servlet之外对request 和response 进行修改.Filter 有一个 FilterChain 的概念,一个Filter ...
- JavaWeb过滤器(Filter)详解,是时候该把过滤器彻底搞懂了(万字说明)
注意:这篇文章很长,学习完后将会解决你对于过滤器(Filter)的所有疑惑,下面将通过理论和代码的结合来进行讲解演示..... 目录 基本介绍 过滤器原理 过滤器(Filter)接口 ...
- java测试类 main方法_Java使用agent实现main方法之前的实例详解
Java使用agent实现main方法之前的实例详解 创建Agent项目 PreMainExecutor 类,在main方法之前执行此方法 public class PreMainExecutor { ...
- java condition详解_Java使用Condition控制线程通信的方法实例详解
Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...
- java图片填充父容器_java相关:spring的父子容器及配置详解
java相关:spring的父子容器及配置详解 发布于 2020-5-26| 复制链接 本篇文章主要介绍了spring的父子容器及配置详解,详细的介绍了spring父子容器的概念.使用场景和用法,有兴 ...
- java list 之详解_java集合(二)List集合之ArrayList详解
前言: 有序列表,允许存放重复的元素: 实现类: ArrayList:数组实现,查询快,增删慢,轻量级:(线程不安全) LinkedList:双向链表实现,增删快,查询慢 (线程不安全) Vector ...
- java中flush函数作用_Java语言中flush()函数作用及使用方法详解
最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...
- java微服务框架有哪些_java中有哪些常见微服务框架
常见微服务框架介绍: Spring Boot:这可能是最好的Java微服务框架了,它适用于控制反转.面向切面编程等等. 示例代码:import org.springframework.boot.*; ...
- java日志与业务分离_java日志分开打印
log4j.rootLogger=DEBUG,CONSOLE #在生产配置下,请关闭应用于控制台CONSOLE选项,仅启用FILE及可 #待验证是否需要 log4j.additivity.com.un ...
最新文章
- 多线程2(常用的方法:join、interrupt、currentThread、isAlive、setDaemon...)
- 如何培养一个搞垮团队的Leader?
- 常见的几个js笔试题
- [UE4]网游中角色Pawn的移动位置同步以及RTS多角色同时移动的解决方案
- Win10 安装程序错误2502/2503 拒绝访问 解决
- iOS PUSH实现的简单步骤
- matlab fig生成exe,MATLAB GUI多个m文件和fig如何生成exe文件
- linux 开源谷歌浏览器_开发人员浏览器,Google开源版本等
- 架构系列一:大型项目架构演进过程
- 博物馆奇妙夜java_博物馆奇妙夜 2 Night At The Museum
- php 目录及文件操作
- Mysql语句改成Oracle语句的区别
- 原来做浏览器这么简单
- MongoDB实战-生产环境中分片的部署与配置
- Debian/Kali possible missing /lib/firmware/i915.... 的解决办法
- 遗传算法之基因型与表现型的相互转换
- html5制作线路图,HTML5画一个简单呢好看的电路图
- 数商云食品行业数字化供应链转型解决方案
- 程序员日常照片大合集!快来大饱眼福!
- 将福昕高级PDF编辑器中创建的PDF签名导出,迁移到其他电脑并导入福昕PDF中