logback 的 filter

本文详细介绍了logback 1.2.3中LevelFilter、ThresholdFilter、Groovy/Java表达式过滤器、OnMarkerEvaluator等,并展示了如何自定义过滤器和配置日志输出。重点讲解了如何通过EvaluatorFilter实现复杂的日志筛选规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  • 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
  • 自定义过滤器。

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值