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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM