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

作者:FFITD 时间:2023-07-25 20:38:08 

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

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

添加JaninoEventEvaluator所需要的依赖包


<!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
       <dependency>
           <groupId>org.codehaus.janino</groupId>
           <artifactId>janino</artifactId>
           <version>3.1.2</version>
       </dependency>

logback中添加相应过滤条件


<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的实现

下面是类代码


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配置

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

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

来源:https://blog.csdn.net/qqzjyywx1/article/details/109167314

标签:logback,filter,过滤,屏蔽类
0
投稿

猜你喜欢

  • WPF实现带筛选功能的DataGrid

    2022-05-07 07:48:56
  • 举例说明自定义C++异常处理的实例

    2022-10-25 13:45:27
  • springboot集成elasticsearch7的图文方法

    2022-05-15 19:46:11
  • Java实现画线、矩形、椭圆、字符串功能

    2022-12-30 19:24:33
  • java与JSON数据的转换实例详解

    2022-07-03 22:48:25
  • Java集合系列之ArrayList源码分析

    2023-01-31 03:02:36
  • 浅谈mybatis中SQL语句给boolean类型赋值问题

    2023-01-19 15:15:42
  • Java编程复用类代码详解

    2021-09-13 10:06:34
  • JAVA基础-GUI

    2023-10-24 22:26:07
  • Java超详细讲解设计模式之一的工厂模式

    2023-03-26 21:08:04
  • Spring底层事务原理解析

    2021-11-25 05:40:29
  • 利用java实现邮箱群发功能

    2021-07-11 21:55:23
  • C#动态webservice调用接口

    2023-10-18 07:22:00
  • 详解C#对XML、JSON等格式的解析

    2022-06-04 22:45:50
  • C#/VB.NET 实现在PDF表格中添加条形码

    2022-12-25 19:58:16
  • C#实现简单订单管理程序

    2023-04-08 08:26:34
  • Spring Security学习笔记(一)

    2023-09-10 06:25:09
  • Spring基于注解的缓存声明深入探究

    2023-01-20 13:26:06
  • C#利用GDI绘制常见图形和文字

    2023-04-09 20:44:40
  • C# 无边框窗体之窗体移动实现代码

    2021-07-22 04:36:48
  • asp之家 软件编程 m.aspxhome.com