当前位置: 首页 > article >正文

聊聊logback的LevelFilter

本文主要研究一下logback的LevelFilter

AbstractMatcherFilter

ch/qos/logback/core/filter/AbstractMatcherFilter.java

public abstract class AbstractMatcherFilter<E> extends Filter<E> {

    protected FilterReply onMatch = FilterReply.NEUTRAL;
    protected FilterReply onMismatch = FilterReply.NEUTRAL;

    final public void setOnMatch(FilterReply reply) {
        this.onMatch = reply;
    }

    final public void setOnMismatch(FilterReply reply) {
        this.onMismatch = reply;
    }

    final public FilterReply getOnMatch() {
        return onMatch;
    }

    final public FilterReply getOnMismatch() {
        return onMismatch;
    }
}

AbstractMatcherFilter继承了Filter,它定义了onMatch及onMismatch属性

LevelFilter

ch/qos/logback/classic/filter/LevelFilter.java

public class LevelFilter extends AbstractMatcherFilter<ILoggingEvent> {

    Level level;

    @Override
    public FilterReply decide(ILoggingEvent event) {
        if (!isStarted()) {
            return FilterReply.NEUTRAL;
        }

        if (event.getLevel().equals(level)) {
            return onMatch;
        } else {
            return onMismatch;
        }
    }

    public void setLevel(Level level) {
        this.level = level;
    }

    public void start() {
        if (this.level != null) {
            super.start();
        }
    }
}

LevelFilter继承了AbstractMatcherFilter,其decide判断event的level等级是否与配置的level一致,一致则返回onMatch,否则返回onMismatch

示例

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    	<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

这里CONSOLE的appender定义了LevelFilter,当level为ERROR级别时ACCEPT,否则DENY

小结

logback提供了LevelFilter,可以配置指定的level、onMatch、onMismatch属性,用于设置指定appender的打印级别。


http://www.kler.cn/news/136391.html

相关文章:

  • 【c++篇】:从基础到实践--c++内存管理技巧与模版编程基础
  • Qt之QCamera的简单使用
  • 【SpringCloud】06-Sentinel
  • 基于行业分类的目标检测与跟踪系统
  • HBuilder X 中Vue.js基础使用->计算属性的应用(三)
  • supermall项目上拉加载bug分析
  • Java实现拼图小游戏
  • 【17】基础知识:reduxjs/toolkit
  • matlab 坡度滤波算法地面分割
  • spring boot加mybatis puls实现,在新增/修改时,对某些字段进行处理,使用的@TableField()
  • leetcode算法之前缀和
  • 【小呆的力学笔记】有限元专题之循环对称结构有限元原理
  • Azure 机器学习 - 搜索中的检索增强 (RAG)
  • Selenium IDE录制脚本
  • macos苹果电脑清理软件有哪些?cleanmymac和腾讯柠檬哪个好
  • 【MISRA C 2012】Rule 4.2 不应该使用三连符
  • 最强英文开源模型Llama2架构与技术细节探秘
  • ChatGPT API 学习
  • C#,数值计算——插值和外推,分段线性插值(Linear_interp)的计算方法与源程序
  • Nginx - 本机读取服务器图像、视频
  • 《 机器人基础 》期末试卷(A)
  • SpringBoot中日志的使用log4j
  • 【腾讯云云上实验室-向量数据库】探索腾讯云向量数据库:全方位管理与高效利用多维向量数据的引领者
  • Ubuntu18.04安装IgH主站
  • 深入理解 @TableName 和 @TableField 注解
  • Python 技巧大揭秘,网络时间和本地时间轻松搞定