最近在处理日志输出的时候,为了方便排除问题,就把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>