最近在處理日志輸出的時候,為了方便排除問題,就把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>
