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

最后運(yùn)行自己的程序就可以看到打印效果。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java學(xué)習(xí)指南之字符串與正則表達(dá)式
在日常Java后端開發(fā)過程中,免不了對(duì)數(shù)據(jù)字段的解析,自然就少不了對(duì)字符串的操作,這其中就包含了正則表達(dá)式這一塊的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于java學(xué)習(xí)指南之字符串與正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2023-05-05
詳解Spring?Boot中@PostConstruct的使用示例代碼
在Java中,@PostConstruct是一個(gè)注解,通常用于標(biāo)記一個(gè)方法,它表示該方法在類實(shí)例化之后(通過構(gòu)造函數(shù)創(chuàng)建對(duì)象之后)立即執(zhí)行,這篇文章主要介紹了詳解Spring?Boot中@PostConstruct的使用,需要的朋友可以參考下2023-09-09
java實(shí)現(xiàn)文件上傳的詳細(xì)步驟
文件上傳是用戶將本地文件通過Web頁面提交到服務(wù)器的過程,涉及客戶端、服務(wù)器端、上傳表單等組件,在SpringBoot中,通過MultipartFile接口處理上傳文件,并將其保存在服務(wù)器,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10
基于SpringBoot生成二維碼的幾種實(shí)現(xiàn)方式
本文將基于Spring Boot介紹兩種生成二維碼的實(shí)現(xiàn)方式,一種是基于Google開發(fā)工具包,另一種是基于Hutool來實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03
登陸驗(yàn)證碼kaptcha結(jié)合spring boot的用法詳解
在一個(gè)web應(yīng)用中驗(yàn)證碼是一個(gè)常見的元素。不管是防止機(jī)器人還是爬蟲都有一定的作用,下面這篇文章主要給大家介紹了登陸驗(yàn)證碼kaptcha結(jié)合spring boot用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-06-06

