利用logback filter過濾某個類 屏蔽某個類
logback filter過濾某個類 屏蔽某個類
使用logback配置日志文件,有的時候需要我們過濾或者屏蔽掉某個類的日志,便可以通過以下方法實現(xiàn)
添加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中添加相應(yīng)過濾條件
<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值,當(dāng)<OnMatch>時不進行l(wèi)og記錄
LogBack的filter的應(yīng)用
最近在做業(yè)務(wù)數(shù)據(jù)的采集。遇到了一個問題,那就是如何通過記錄日志的方式捕獲需要的業(yè)務(wù)數(shù)據(jù)(這里我需要的是某個對象的json格式的數(shù)據(jù))。我們知道如果采用log.info的形式記錄日志,盡管我們可以寫多個appender讓info級別的日志信息輸出到兩個不同的文件,但是記錄業(yè)務(wù)數(shù)據(jù)的文件里面也會有其他info級別的日志信息。那么如何過濾呢,就用到了LogBack的filter。
LogbackFilter介紹
lockback的過濾器可以過濾記錄日志的內(nèi)容,然后返回FilterReply類型的枚舉類。從而將不符合條件的日志信息過濾掉。
Logback提供兩類Filter,一類是Regular Filter;另外一類是Turbo Filter。
Regular Filter主要應(yīng)用在appeder上,只在appender級別起作用,Appender實例上可以綁定一個Regular Filter實例鏈。Regular Filter繼承實現(xiàn)”ch.qos.logback.core.filter.Filter”類,自定義自己的regular filter需要繼承ch.qos.logback.core.filter.Filter類,并實現(xiàn)decide()方法。
TurboFilter對象綁定到日志記錄上下文。因此,不僅在使用給定的appender時調(diào)用它們,而且每次都發(fā)出日志記錄請求。它們的范圍比附加到附加器的過濾器更寬。更重要的是,它們在LoggingEvent對象創(chuàng)建之前被調(diào)用 。 TurboFilter對象不需要實例化日志記錄事件來過濾日志記錄請求。因此,turbo過濾器旨在用于記錄事件的高性能過濾,甚至在創(chuàng)建事件之前。要實現(xiàn)該類型的filter需要繼承ch.qos.logback.classic.turbo.TurboFilter;類具體的實現(xiàn)可參考LogBack官網(wǎng)-過濾器實現(xiàn)。
自定義regular Filter
由于我的業(yè)務(wù)是指針對info級別的日志所以沒必要實現(xiàn)全局的turboFiter,這里只給出regular Filter的實現(xiàn)
下面是類代碼
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配置

最后運行自己的程序就可以看到打印效果。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Spring?Boot中@PostConstruct的使用示例代碼
在Java中,@PostConstruct是一個注解,通常用于標記一個方法,它表示該方法在類實例化之后(通過構(gòu)造函數(shù)創(chuàng)建對象之后)立即執(zhí)行,這篇文章主要介紹了詳解Spring?Boot中@PostConstruct的使用,需要的朋友可以參考下2023-09-09
基于SpringBoot生成二維碼的幾種實現(xiàn)方式
本文將基于Spring Boot介紹兩種生成二維碼的實現(xiàn)方式,一種是基于Google開發(fā)工具包,另一種是基于Hutool來實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2022-03-03
登陸驗證碼kaptcha結(jié)合spring boot的用法詳解
在一個web應(yīng)用中驗證碼是一個常見的元素。不管是防止機器人還是爬蟲都有一定的作用,下面這篇文章主要給大家介紹了登陸驗證碼kaptcha結(jié)合spring boot用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-06-06

