logback使用MDCFilter日志过滤源码解读

 更新时间:2023年11月15日 10:19:24   作者:codecraft  
这篇文章主要介绍了logback使用MDCFilter日志过滤源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

本文主要研究一下logback的MDCFilter

MatchingFilter

ch/qos/logback/classic/turbo/MatchingFilter.java

public abstract class MatchingFilter extends TurboFilter {
    protected FilterReply onMatch = FilterReply.NEUTRAL;
    protected FilterReply onMismatch = FilterReply.NEUTRAL;
    final public void setOnMatch(String action) {
        if ("NEUTRAL".equals(action)) {
            onMatch = FilterReply.NEUTRAL;
        } else if ("ACCEPT".equals(action)) {
            onMatch = FilterReply.ACCEPT;
        } else if ("DENY".equals(action)) {
            onMatch = FilterReply.DENY;
        }
    }
    final public void setOnMismatch(String action) {
        if ("NEUTRAL".equals(action)) {
            onMismatch = FilterReply.NEUTRAL;
        } else if ("ACCEPT".equals(action)) {
            onMismatch = FilterReply.ACCEPT;
        } else if ("DENY".equals(action)) {
            onMismatch = FilterReply.DENY;
        }
    }
}
MatchingFilter继承了TurboFilter,它提供了setOnMatch及setOnMismatch方法,它们在action为NEUTRAL、ACCEPT、DENY时设置对应的onMatch、onMismatch

MDCFilter

ch/qos/logback/classic/turbo/MDCFilter.java

public class MDCFilter extends MatchingFilter {
    String MDCKey;
    String value;
    @Override
    public void start() {
        int errorCount = 0;
        if (value == null) {
            addError("\'value\' parameter is mandatory. Cannot start.");
            errorCount++;
        }
        if (MDCKey == null) {
            addError("\'MDCKey\' parameter is mandatory. Cannot start.");
            errorCount++;
        }
        if (errorCount == 0)
            this.start = true;
    }
    @Override
    public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {
        if (!isStarted()) {
            return FilterReply.NEUTRAL;
        }
        String value = MDC.get(MDCKey);
        if (this.value.equals(value)) {
            return onMatch;
        }
        return onMismatch;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public void setMDCKey(String MDCKey) {
        this.MDCKey = MDCKey;
    }
}
MDCFilter继承了MatchingFilter,其start方法校验MDCKey及value属性是否有值,其decide方法跟从MDC获取指定key的值,然后判断该值域value是否相等,相等则返回onMatch,否则返回onMismatch

示例

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <turboFilter class="ch.qos.logback.classic.turbo.MDCFilter">
    <MDCKey>username</MDCKey>
    <Value>sebastien</Value>
    <OnMatch>ACCEPT</OnMatch>
  </turboFilter>
  <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
    <Marker>billing</Marker>
    <OnMatch>DENY</OnMatch>
  </turboFilter>
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%date [%thread] %-5level %logger - %msg%n</Pattern>
    </layout>
  </appender>
  <root level="info">
    <appender-ref ref="console" />
  </root>
</configuration>

小结

logback提供了MDCFilter,它可以根据指定的MDCKey从MDC取值,然后根据配置的value进行判断,然后执行onMatch或者onMismatch来决定是否打印日志。

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

相关文章

  • 在Java中轻松将HTML格式文本转换为纯文本的方法示例(保留换行)

    在Java中轻松将HTML格式文本转换为纯文本的方法示例(保留换行)

    这篇文章主要介绍了在Java中轻松将HTML格式文本转换为纯文本的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Java编程IP地址和数字相互转换代码示例

    Java编程IP地址和数字相互转换代码示例

    这篇文章主要介绍了Java编程IP地址和数字相互转换代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • JAVA Swing实现窗口添加课程信息过程解析

    JAVA Swing实现窗口添加课程信息过程解析

    这篇文章主要介绍了JAVA Swing实现窗口添加课程信息过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • mybatis通过TypeHandler list转换string类型转换方式

    mybatis通过TypeHandler list转换string类型转换方式

    这篇文章主要介绍了mybatis通过TypeHandler list转换string类型转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • springMVC使用ajaxFailUpload上传图片的方法

    springMVC使用ajaxFailUpload上传图片的方法

    这篇文章主要介绍了springMVC使用ajaxFailUpload上传图片的相关知识,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • SpringMVC的最小化配置说明

    SpringMVC的最小化配置说明

    这篇文章主要介绍了SpringMVC的最小化配置说明,Spring MVC是一个基于Java的Web框架,用于构建灵活、高效的Web应用程序,它采用了MVC的设计模式,将应用程序的逻辑分为模型、视图和控制器三个部分,以实现代码的分离和重用,需要的朋友可以参考下
    2023-10-10
  • Maven 的配置文件路径读取方法

    Maven 的配置文件路径读取方法

    这篇文章主要介绍了Maven 的配置文件路径读取方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • java synchronized加载加锁-线程可重入详解及实例代码

    java synchronized加载加锁-线程可重入详解及实例代码

    这篇文章主要介绍了java synchronized加载加锁-线程可重入详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • java数据结构基础:单,双向链表

    java数据结构基础:单,双向链表

    这篇文章主要介绍了Java的数据解构基础,希望对广大的程序爱好者有所帮助,同时祝大家有一个好成绩,需要的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • SpringBoot中如何统一接口返回与全局异常处理详解

    SpringBoot中如何统一接口返回与全局异常处理详解

    全局异常处理是个比较重要的功能,一般在项目里都会用到,这篇文章主要给大家介绍了关于SpringBoot中如何统一接口返回与全局异常处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-09-09

最新评论