LogBack的filter的应用

本文介绍了如何使用LogBack的过滤器功能来精确捕获特定格式的日志信息,特别是JSON格式的业务数据。通过自定义RegularFilter,实现了仅记录符合特定格式的日志条目。

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

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配置
这里写图片描述
最后运行自己的程序就可以看到打印效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值