利用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)文章
利用SpringBoot和LiteFlow解鎖復(fù)雜流程
隨著業(yè)務(wù)的復(fù)雜化,企業(yè)需要更加高效、便捷地管理自己的業(yè)務(wù)流程,這就需要借助一些流程引擎實現(xiàn),今天,我們就來介紹一種基于Java語言開發(fā)的輕量級工作流引擎——LiteFlow,以及如何在Spring Boot框架中集成它,從而提高企業(yè)的工作效率和開發(fā)效率2023-06-06SpringMVC實現(xiàn)參數(shù)校驗配置方法
這篇文章主要介紹了SpringMVC實現(xiàn)參數(shù)校驗的配置方式,Spring MVC會拋出MethodArgumentNotValidException異常,并將錯誤信息綁定到相應(yīng)的字段上,感興趣的朋友跟隨小編一起看看吧2024-03-03阿里資深技術(shù)專家:在各階段中3年經(jīng)驗的java程序員應(yīng)該具備哪些技術(shù)能力
這篇文章主要介紹了阿里資深技術(shù)專家:在各階段中3年經(jīng)驗的java程序員應(yīng)該具備哪些技術(shù)能力,本文給大家列舉了一些內(nèi)容,大家可以根據(jù)自己需要有方法的掌握,感興趣的朋友跟隨小編一起看看吧2020-07-07Redis中String字符串和sdshdr結(jié)構(gòu)體超詳細講解
這篇文章主要介紹了Redis中String字符串和sdshdr結(jié)構(gòu)體,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04