好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

利用logback filter过滤某个类 屏蔽某个类

logback filter过滤某个类 屏蔽某个类

使用logback配置日志文件,有的时候需要我们过滤或者屏蔽掉某个类的日志,便可以通过以下方法实现

添加JaninoEventEvaluator所需要的依赖包

?

1

2

3

4

5

6

<!-- https://mvnrepository测试数据/artifact/org.codehaus.janino/janino -->

         < dependency >

             < groupId >org.codehaus.janino</ groupId >

             < artifactId >janino</ artifactId >

             < version >3.1.2</ version >

         </ dependency >

logback中添加相应过滤条件

?

1

2

3

4

5

6

7

8

9

10

< appender name = "FILE_ERROR" class = "ch.qos.logback.core.rolling.RollingFileAppender" >

< filter class = "ch.qos.logback.core.filter.EvaluatorFilter" >

                 < evaluator class = "ch.qos.logback.classic.boolex.JaninoEventEvaluator" >

                     < expression >logger.contains("UserController")</ expression >

                 </ evaluator >

                 < OnMismatch >NEUTRAL</ OnMismatch >

                 < OnMatch >DENY</ OnMatch >

             </ filter >

             ............

</ appender >

语句<expression>中含义是是否logger名包含UserController,返回一个Boolean值,当<OnMatch>时不进行log记录

LogBack的filter的应用

最近在做业务数据的采集。遇到了一个问题,那就是如何通过记录日志的方式捕获需要的业务数据(这里我需要的是某个对象的json格式的数据)。我们知道如果采用log.info的形式记录日志,尽管我们可以写多个appender让info级别的日志信息输出到两个不同的文件,但是记录业务数据的文件里面也会有其他info级别的日志信息。那么如何过滤呢,就用到了LogBack的filter。

LogbackFilter介绍

lockback的过滤器可以过滤记录日志的内容,然后返回FilterReply类型的枚举类。从而将不符合条件的日志信息过滤掉。

Logback提供两类Filter,一类是Regular Filter;另外一类是Turbo Filter。

Regular Filter主要应用在appeder上,只在appender级别起作用,Appender实例上可以绑定一个Regular Filter实例链。Regular Filter继承实现]ch.qos.logback.core.filter.Filter]类,自定义自己的regular filter需要继承ch.qos.logback.core.filter.Filter类,并实现decide()方法。

TurboFilter对象绑定到日志记录上下文。因此,不仅在使用给定的appender时调用它们,而且每次都发出日志记录请求。它们的范围比附加到附加器的过滤器更宽。更重要的是,它们在LoggingEvent对象创建之前被调用 。 TurboFilter对象不需要实例化日志记录事件来过滤日志记录请求。因此,turbo过滤器旨在用于记录事件的高性能过滤,甚至在创建事件之前。要实现该类型的filter需要继承ch.qos.logback.classic.turbo.TurboFilter;类具体的实现可参考LogBack官网-过滤器实现。

自定义regular Filter

由于我的业务是指针对info级别的日志所以没必要实现全局的turboFiter,这里只给出regular Filter的实现

下面是类代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package com.qf58.srm.pub;

import ch.qos.logback.classic.spi.ILoggingEvent;

import ch.qos.logback.core.filter.Filter;

import ch.qos.logback.core.spi.FilterReply;

/**

  * @Author: WangZhan

  * @Description:

  * @Date Created in 11:53 2018/7/26.

  */

public class BdLogMessageFilter extends Filter<ILoggingEvent> {

     @Override

     public FilterReply decide(ILoggingEvent iLoggingEvent) {

         if (iLoggingEvent.getMessage() != null && iLoggingEvent.getMessage().startsWith( "{" ) && iLoggingEvent

                 .getMessage().endsWith( "}" )){

             return FilterReply.ACCEPT;

         }

         return   FilterReply.DENY;

     }

}

下面是logback配置

最后运行自己的程序就可以看到打印效果。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/qqzjyywx1/article/details/109167314

查看更多关于利用logback filter过滤某个类 屏蔽某个类的详细内容...

  阅读:17次