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