网站的排版包括什么意思,网站刷流量有用吗,个体经营所得税核定征收2023,电子商务网站系统设计logback有两种过滤器#xff0c;一种是context中的过滤器叫TurboFilter#xff0c;是一个全局的过滤器#xff0c;会影响所有的日志记录。另一种是Appender中的过滤器#xff0c;只对所在的append有效。两者大同小异#xff0c;这里我们以Appender的过滤器为例。
#x…logback有两种过滤器一种是context中的过滤器叫TurboFilter是一个全局的过滤器会影响所有的日志记录。另一种是Appender中的过滤器只对所在的append有效。两者大同小异这里我们以Appender的过滤器为例。
一自定义一个过滤器
我们先实现一个LevelRangeFilter目的是对日志区间进行过滤只有在[minLevelmaxLevel)中的日志事件才允许输出到日志文件中如下
package com.mall.common.log;import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.AbstractMatcherFilter;
import ch.qos.logback.core.spi.FilterReply;/*** author Lft* since 2024/12/30 21:49*/
public class LevelRangeFilter extends AbstractMatcherFilterILoggingEvent {Level minLevel;Level maxLevel;Overridepublic FilterReply decide(ILoggingEvent event) {if (!isStarted()) {return FilterReply.NEUTRAL;}if (minLevel null) {if (!event.getLevel().isGreaterOrEqual(maxLevel)) {return onMatch;} else {return onMismatch;}} else if (maxLevel null) {if (event.getLevel().isGreaterOrEqual(minLevel)) {return onMatch;} else {return onMismatch;}}if (event.getLevel().isGreaterOrEqual(minLevel) !event.getLevel().isGreaterOrEqual(maxLevel)) {return onMatch;} else {return onMismatch;}}public void setMinLevel(Level minLevel) {this.minLevel minLevel;}public void setMaxLevel(Level maxLevel) {this.maxLevel maxLevel;}public void start() {if (this.minLevel ! null || this.maxLevel ! null) {super.start();}}
}过滤器的过滤方法decide很简单只是对日志事件的级别进行判断是否在[minLevelmaxLevel)进行判断支持[,maxLevel以及[minLevel,)。
几个注意事项
1过滤器必须实现Filter接口这里建议继承AbstractMatcherFilter
2minLevel和maxLevel这两个属性是自定义的需要在xml配置文件中配置那么需要提供set方法以便xml解析时能够通过隐式规则进行设置。
3提供start方法更符合它的设计理念。
二xml配置文件配置过滤器
configuration scantrue scanPeriod1 minute debugtrue!--turboFilter class/--!-- Appenders --appender nameCONSOLE classch.qos.logback.core.ConsoleAppenderencoderpattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n/pattern/encoder/appenderappender nameROLLING classch.qos.logback.core.rolling.RollingFileAppenderfilelogs/logback.log/filerollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePatternlogs/logback.%d{yyyy-MM-dd}.log/fileNamePatternmaxHistory30/maxHistory !-- 保留最近30天的日志文件 --/rollingPolicyencoderpattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n/pattern/encoder/appenderappender nameimpossible classch.qos.logback.core.rolling.RollingFileAppenderfilelogs/impossible.log/filerollingPolicy classch.qos.logback.core.rolling.FixedWindowRollingPolicyfileNamePatternimpossible.%i.log.zip/fileNamePatternminIndex1/minIndexmaxIndex3/maxIndex/rollingPolicytriggeringPolicy classch.qos.logback.core.rolling.SizeBasedTriggeringPolicymaxFileSize5MB/maxFileSize/triggeringPolicyencoderpattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} %msg%n/pattern/encoderfilter classcom.mall.common.log.LevelRangeFilterminLevelWARN/minLevelmaxLevelERROR/maxLevelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appenderlogger nameimpossible additivityfalseappender-ref refimpossible//logger!-- Root Logger --root levelInfoappender-ref refCONSOLE/appender-ref refROLLING//root
/configuration
过滤器配置日志级别是[WARN,ERROR)所以只会输出WARN级别日志。 使用如上测试程序运行如下: ps:日志过滤器如何生效的源码在上一篇《logback日志框架源码分析》中的第四节-打印日志中有详细介绍想了解的可转到那篇进行了解这里不再重复介绍