logback ThresholdFilter临界值日志过滤器源码解读

 更新时间:2023年11月21日 09:43:26   作者:codecraft  
这篇文章主要为大家介绍了logback ThresholdFilter临界值日志过滤器源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

本文主要研究一下logback的ThresholdFilter

ThresholdFilter

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

public class ThresholdFilter extends Filter<ILoggingEvent> {
    Level level;
    @Override
    public FilterReply decide(ILoggingEvent event) {
        if (!isStarted()) {
            return FilterReply.NEUTRAL;
        }
        if (event.getLevel().isGreaterOrEqual(level)) {
            return FilterReply.NEUTRAL;
        } else {
            return FilterReply.DENY;
        }
    }
    public void setLevel(String level) {
        this.level = Level.toLevel(level);
    }
    public void start() {
        if (this.level != null) {
            super.start();
        }
    }
}
ThresholdFilter继承了Filter,其decide方法从ILoggingEvent获取level,若该level大于等于指定的level则返回NEUTRAL,否则返回DENY

isGreaterOrEqual

ch/qos/logback/classic/Level.java

public final class Level implements java.io.Serializable {
    private static final long serialVersionUID = -814092767334282137L;
    public static final int OFF_INT = Integer.MAX_VALUE;
    public static final int ERROR_INT = 40000;
    public static final int WARN_INT = 30000;
    public static final int INFO_INT = 20000;
    public static final int DEBUG_INT = 10000;
    public static final int TRACE_INT = 5000;
    public static final int ALL_INT = Integer.MIN_VALUE;
    /**
     * The <code>OFF</code> is used to turn off logging.
     */
    public static final Level OFF = new Level(OFF_INT, "OFF");
    /**
     * The <code>ERROR</code> level designates error events which may or not be
     * fatal to the application.
     */
    public static final Level ERROR = new Level(ERROR_INT, "ERROR");
    /**
     * The <code>WARN</code> level designates potentially harmful situations.
     */
    public static final Level WARN = new Level(WARN_INT, "WARN");
    /**
     * The <code>INFO</code> level designates informational messages highlighting
     * overall progress of the application.
     */
    public static final Level INFO = new Level(INFO_INT, "INFO");
    /**
     * The <code>DEBUG</code> level designates informational events of lower
     * importance.
     */
    public static final Level DEBUG = new Level(DEBUG_INT, "DEBUG");
    /**
     * The <code>TRACE</code> level designates informational events of very low
     * importance.
     */
    public static final Level TRACE = new Level(TRACE_INT, "TRACE");
    /**
     * The <code>ALL</code> is used to turn on all logging.
     */
    public static final Level ALL = new Level(ALL_INT, "ALL");
    public final int levelInt;
    public final String levelStr;
    /**
     * Instantiate a Level object.
     */
    private Level(int levelInt, String levelStr) {
        this.levelInt = levelInt;
        this.levelStr = levelStr;
    }
    /**
     * Returns <code>true</code> if this Level has a higher or equal Level than the
     * Level passed as argument, <code>false</code> otherwise.
     */
    public boolean isGreaterOrEqual(Level r) {
        return levelInt >= r.levelInt;
    }
    //......
}
Level定义了OFF(Integer.MAX_VALUE)、ERROR(40000)、WARN(30000)、INFO(20000)、DEBUG(10000)、TRACE(5000)、ALL(Integer.MIN_VALUE)这几个level,其int值依次减小。isGreaterOrEqual方法则是根据levelInt值来判断。

示例

<appender name="FILE_INFO"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>infoLog.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>infoLogs.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>
这里对FILE_INFO添加了ThresholdFilter,只有级别大于等于INFO的才打印

小结

logback的ThresholdFilter继承了Filter,其decide方法从ILoggingEvent获取level,若该level大于等于指定的level则返回NEUTRAL,否则返回DENY。Level定义了OFF(Integer.MAX_VALUE)、ERROR(40000)、WARN(30000)、INFO(20000)、DEBUG(10000)、TRACE(5000)、ALL(Integer.MIN_VALUE)这几个level,其int值依次减小。isGreaterOrEqual方法则是根据levelInt值来判断。

以上就是logback ThresholdFilter临界值日志过滤器源码解读的详细内容,更多关于logback ThresholdFilter日志过滤器的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot原生组件注入实现两种方式介绍

    SpringBoot原生组件注入实现两种方式介绍

    SpringBoot是Spring全家桶的成员之一,基于约定优于配置的思想(即有约定默认值,在不配置的情况下会使用默认值,在配置文件下配置的话会使用配置的值)。SpringBoot是一种整合Spring技术栈的方式(或者说是框架),同时也是简化Spring的一种快速开发的脚手架
    2022-10-10
  • IDEA新手必备之各种快捷键详解

    IDEA新手必备之各种快捷键详解

    这篇文章主要介绍了IDEA新手必备之各种快捷键详解,文中有非常详细的快捷键介绍,对正在使用IDEA的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Java list移除元素相关操作指南

    Java list移除元素相关操作指南

    这篇文章主要给大家介绍了关于Java list移除元素相关操作的相关资料,文中介绍的方法包括增强for循环、迭代器、Stream流和removeIf()方法,同时还介绍了如何从一个列表中删除包含另一个列表元素的方法,以及如何删除指定下标位置的元素,需要的朋友可以参考下
    2024-12-12
  • java计算两点间的距离方法总结

    java计算两点间的距离方法总结

    小编给大家总结了在java中计算两点之家距离的方法以及相关实例代码分享,有需要的读者参考下。
    2018-02-02
  • Eclipse maven项目lombok安装配置图解

    Eclipse maven项目lombok安装配置图解

    这篇文章主要介绍了Eclipse maven项目lombok安装配置图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Spring Hibernate实现分页功能

    Spring Hibernate实现分页功能

    这篇文章主要为大家详细介绍了Spring Hibernate实现分页功能的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Java项目之java+springboot+ssm实现理财管理系统设计

    Java项目之java+springboot+ssm实现理财管理系统设计

    这篇文章主要介绍了Java项目java+springboot+ssm实现理财管理系统设计,使用了当前较为流行的spring boot,spring,spring mvc,mybatis,shiro框架分页处理使用了pagehelper进行操作,需要的朋友可以参考一下
    2022-03-03
  • Java分页简介_动力节点Java学院整理

    Java分页简介_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java分页简介的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 使用Java实现Excel转PDF的示例详解

    使用Java实现Excel转PDF的示例详解

    在实际的开发过程中,我们常常会遇到需要将 Excel 文件转换为 PDF 文件的需求,本文为大家介绍一种Java中的常见实现方式,需要的可以参考一下
    2025-02-02
  • JPA配置详解之jpaProperties用法

    JPA配置详解之jpaProperties用法

    这篇文章主要介绍了JPA配置详解之jpaProperties用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论