前言
- logback 1.2.3
概述
logback 的 filter 有:
- 级别过滤器
ch.qos.logback.classic.filter.LevelFilter
。 - 阀值过滤器
ch.qos.logback.classic.filter.ThresholdFilter
。 - 表达式过滤器
ch.qos.logback.core.filter.EvaluatorFilter
。- Groovy的表达式
ch.qos.logback.classic.boolex.GEventEvaluator
。 - Java的表达式
ch.qos.logback.classic.boolex.JaninoEventEvaluator
。使用 Janino 解析java script。 - 包含标记
ch.qos.logback.classic.boolex.OnMarkerEvaluator
- Groovy的表达式
- 自定义过滤器。
ch.qos.logback.classic.filter.LevelFilter
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
ch.qos.logback.classic.filter.ThresholdFilter
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
ch.qos.logback.classic.boolex.JaninoEventEvaluator
需要额外的两个JAR包,commons-compiler.jar和janino.jar
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
<version>3.0.12</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.12</version>
</dependency>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return message.contains("There is no session with id");</expression>
</evaluator>
<OnMatch>DENY</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</filter>
ch.qos.logback.classic.boolex.OnMarkerEvaluator
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>MYBATIS</marker>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
关于maker:
Logger 类中有携带 Marker
参数的方法,如下:
public interface Logger {
public void debug(Marker marker, String msg);
public void error(Marker marker, String msg);
...
}
携带 Marker
参数的日志,可以添加%marker
参数查看日志中的Marker
(可能为空)。
%d{HH:mm:ss.SSS} [%thread][%marker] %-5level %logger{20} - [%method,%line] - %msg%n
15:44:41.649 [restartedMain][MYBATIS] DEBUG c.p.q.m.S.selectJobAll - [debug,137] - ==> Preparing: select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark from sys_job
15:44:41.650 [restartedMain][MYBATIS] DEBUG c.p.q.m.S.selectJobAll - [debug,137] - ==> Parameters:
15:44:41.666 [restartedMain][MYBATIS] DEBUG c.p.q.m.S.selectJobAll - [debug,137] - <== Total: 4
15:45:13.097 [peopleNumberScheduler_Worker-1][] INFO c.p.s.t.PeopleNumberTask - [calculatePeopleNumber,59] - 计算人数成功
自定义过滤器
略。
Filter可以串联
- DENY:日志将立即被抛弃不再经过其他过滤器;
- NEUTRAL:有序列表里的下个过滤器过接着处理日志;(该级别既不处理,也不抛弃,相当于没有任何处理,日志会被保存下来并在本appender被执行)
- ACCEPT:日志会被立即处理,不再经过剩余过滤器。
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤调某些特征的日志 -->
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>MYBATIS</marker>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return message.contains("There is no session with id");</expression>
</evaluator>
<OnMatch>DENY</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</filter>
<!-- >= INFO 的日志被记录下来 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
参考
http://www.zhouqishan.cn/2019/05/17/logback%E8%BF%87%E6%BB%A4%E5%99%A8%E4%B9%8Bevaluatorfilter/
https://logback.qos.ch/demo.html
http://janino-compiler.github.io/janino/