时间:2021-05-19
笔者语录:我发现我喜欢捣鼓一些小玩意儿,虽然官网(见文末)写得很明白了,但是咱们对感兴趣的部分来敲一遍代码好吧。
过滤器简介:
简介
logback具有过滤器支持。logbcak允许给日志记录器appender配置一个或多个Filter(或者给整体配置一个或多个TurboFilter),来控制:当满足过滤器指定的条件时,才记录日志(或不满足条件时,拒绝记录日志)。logback支持自定义过滤器,当然logback也自带了一些常用的过滤器,在绝大多数时候,自带的过滤器其实就够用了,一般是不需要自定义过滤器的。
logback提供的过滤器支持主要分两大类
ch.qos.logback.core.filter.Filter
ch.qos.logback.classic.turbo.TurboFilter
过滤器 来源 说明 相对常用 LevelFilter Filter 对指定level的日志进行记录(或不记录),对不等于指定level的日志不记录(或进行记录) 是 ThresholdFilter Filter 对大于或等于指定level的日志进行记录(或不记录),对小于指定level的日志不记录(或进行记录)若过滤器已经返回了需要记录,那么就一定会对该日志进行记录(不论当前日志的level是否大于等于系统设置的最低日志级别)。
TurboFilter的性能是优于Filter的,这是因为TurboFilter的作用时机是在创建日志事件ILoggingEvent对象之前,而Filter的作用时机是在创建之后。若一个日志注定是会被过滤掉不记录的,那么创建ILoggingEvent对象(包括后续的参数组装方法调用等)这个步骤无疑是非常消耗性能的。
过滤器的FilterReply状态枚举:
对于Filter而言,需不需要记录日志,取决于ch.qos.logback.core.filter.Filter#decide方法的返回:
Filter与TurboFilter自带的几种常用过滤器
对于TurboFilter而言,需不需要记录日志,取决于ch.qos.logback.classic.turbo.TurboFilter#decide方法的返回:
可以看到,返回的都是FilterReply这个枚举:
FilterReply有三种枚举值:
DENY:表示不用看后面的过滤器了,这里就给拒绝了,不作记录。
NEUTRAL:表示需不需要记录,还需要看后面的过滤器。若所有过滤器返回的全部都是NEUTRAL,那么需要记录日志。
ACCEPT:表示不用看后面的过滤器了,这里就给直接同意了,需要记录。
过滤器的使用(示例):
使用LevelFilter的logback.xml(示例):
测试一下:
编写测试方法:
运行方法,产出日志:
使用ThresholdFilter的logback.xml(示例):
测试一下:
编写测试方法:
运行方法,产出日志:
使用EvaluatorFilter的logback.xml(示例):
需要引入额外的解析库依赖janino:
<dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.1.2</version></dependency>logbaxk.xml
测试一下:
编写测试方法:
运行方法,产出日志:
使用MDCFilter的logback.xml(示例):
测试一下:
编写测试方法:
运行方法,产出日志:
自定义过滤器:
自定义Filter:
编写自定义Filter
在logback.xml中配置使用此过滤器
测试一下:
编写测试方法:
运行方法,产出日志:
自定义TurboFilter:
编写自定义TurboFilter
在logback.xml中配置使用此过滤器
测试一下:
编写测试方法:
运行方法,产出日志:
logback使用filter过滤日志,初步学习完毕!
以上这篇logback使用filter过滤日志操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
SpringBoot中默认使用Logback进行日志输出,可以同时使用SpringBoot框架的配置文件application.yml或是通过logback的配
一、logback日志技术介绍SpringBoot中使用的日志技术为logback。其与Log4J都出自同一人,性能要优于Log4J,是Log4J的替代者。在S
springboot日志默认采用logback进行输出,你可以对logback进行定制化,方法如下:在resources文件夹下建立logback.xml配置文
SpringBoot中实现一个过滤器相当简单,实现javax.servlet.Filter接口即可。下面以实现一个记录接口访问日志及请求耗时的过滤器为例:1、定
前言SpringBoot默认使用Logback,来打印日志,这里还想说的SLFJ(SimpleLoggingFacadeforJava),它们之间的关系,一张图