1. 程式人生 > >LogBack的filter的應用

LogBack的filter的應用

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配置
這裡寫圖片描述
最後執行自己的程式就可以看到列印效果。