Logback自定义过滤器

Posted Se7end

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Logback自定义过滤器相关的知识,希望对你有一定的参考价值。

最近在处理日志输出的时候,为了方便排除问题,就把SQL的SELECT,INSERT,UPDATE,DELETE等操作做了日志记录。

框架用的是MyBatis-Plus的日志输出。

这里输出的时候,查询和修改的日志输出级别不一样,查询的是TRACE,修改的是DEBUG,然后使用Logback.xml配置过滤器的时候发现,Level只能配置一个级别。

所以自己写了个过滤器。

增加了适配模式,EQ,LE,GE三种匹配规则。

代码如下:

public enum FilterModel {

    /**
     * 相等
     */
    EQ,
    /**
     * 小于等于
     */
    LE,
    /**
     * 大于等于
     */
    GE
}
public class ManyLevelFilter extends AbstractMatcherFilter<ILoggingEvent> {

    private Level level;
    private FilterModel model;

    @Override
    public FilterReply decide(ILoggingEvent event) {
        if (!isStarted()) {
            return FilterReply.NEUTRAL;
        }
        if (FilterModel.EQ.equals(this.model)) {
            if (event.getLevel().equals(this.level)) {
                return this.onMatch;
            }
        } else if (FilterModel.LE.equals(this.model)) {
            if (event.getLevel().toInt() <= this.level.toInt()) {
                return this.onMatch;
            }
        } else if (FilterModel.GE.equals(this.model)) {
            if (event.getLevel().toInt() >= this.level.toInt()) {
                return this.onMatch;
            }
        }
        return this.onMismatch;
    }

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

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

    public void setModel(FilterModel model) {
        this.model = model;
    }
}

xml中配置:

<filter class="com.log.filter.ManyLevelFilter">
<!-- 过滤的级别 -->
<level>DEBUG</level>
<!-- 过滤模式 -->
<model>LE</model>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>

以上是关于Logback自定义过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Logback中如何自定义灵活的日志过滤规则

Logback 日志持久化

java日志框架系列:logback框架过滤器(filter)详解

logback配置文件详解

通过LOGBACK实现每个类包或自定义级别

logback自定义转换的问题