logback使用MDCFilter日志過濾源碼解讀
序
本文主要研究一下logback的MDCFilter
MatchingFilter
ch/qos/logback/classic/turbo/MatchingFilter.java
public abstract class MatchingFilter extends TurboFilter { protected FilterReply onMatch = FilterReply.NEUTRAL; protected FilterReply onMismatch = FilterReply.NEUTRAL; final public void setOnMatch(String action) { if ("NEUTRAL".equals(action)) { onMatch = FilterReply.NEUTRAL; } else if ("ACCEPT".equals(action)) { onMatch = FilterReply.ACCEPT; } else if ("DENY".equals(action)) { onMatch = FilterReply.DENY; } } final public void setOnMismatch(String action) { if ("NEUTRAL".equals(action)) { onMismatch = FilterReply.NEUTRAL; } else if ("ACCEPT".equals(action)) { onMismatch = FilterReply.ACCEPT; } else if ("DENY".equals(action)) { onMismatch = FilterReply.DENY; } } }
MatchingFilter繼承了TurboFilter,它提供了setOnMatch及setOnMismatch方法,它們?cè)赼ction為NEUTRAL、ACCEPT、DENY時(shí)設(shè)置對(duì)應(yīng)的onMatch、onMismatch
MDCFilter
ch/qos/logback/classic/turbo/MDCFilter.java
public class MDCFilter extends MatchingFilter { String MDCKey; String value; @Override public void start() { int errorCount = 0; if (value == null) { addError("\'value\' parameter is mandatory. Cannot start."); errorCount++; } if (MDCKey == null) { addError("\'MDCKey\' parameter is mandatory. Cannot start."); errorCount++; } if (errorCount == 0) this.start = true; } @Override public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) { if (!isStarted()) { return FilterReply.NEUTRAL; } String value = MDC.get(MDCKey); if (this.value.equals(value)) { return onMatch; } return onMismatch; } public void setValue(String value) { this.value = value; } public void setMDCKey(String MDCKey) { this.MDCKey = MDCKey; } }
MDCFilter繼承了MatchingFilter,其start方法校驗(yàn)MDCKey及value屬性是否有值,其decide方法跟從MDC獲取指定key的值,然后判斷該值域value是否相等,相等則返回onMatch,否則返回onMismatch
示例
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <turboFilter class="ch.qos.logback.classic.turbo.MDCFilter"> <MDCKey>username</MDCKey> <Value>sebastien</Value> <OnMatch>ACCEPT</OnMatch> </turboFilter> <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter"> <Marker>billing</Marker> <OnMatch>DENY</OnMatch> </turboFilter> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%date [%thread] %-5level %logger - %msg%n</Pattern> </layout> </appender> <root level="info"> <appender-ref ref="console" /> </root> </configuration>
小結(jié)
logback提供了MDCFilter,它可以根據(jù)指定的MDCKey從MDC取值,然后根據(jù)配置的value進(jìn)行判斷,然后執(zhí)行onMatch或者onMismatch來決定是否打印日志。
以上就是logback使用MDCFilter日志過濾源碼解讀的詳細(xì)內(nèi)容,更多關(guān)于logback MDCFilter日志過濾的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringSecurity實(shí)現(xiàn)登陸認(rèn)證并返回token方式
這篇文章主要介紹了SpringSecurity實(shí)現(xiàn)登陸認(rèn)證并返回token方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Java某個(gè)經(jīng)緯度是否在genjson文件中問題
GeoJSON是一種用于地理空間信息數(shù)據(jù)交換的格式,基于JSON,要判斷某個(gè)經(jīng)緯度是否在某個(gè)區(qū)域內(nèi),首先需要解析GeoJSON文件,確定區(qū)域邊界,然后使用經(jīng)緯度進(jìn)行比較2024-11-11MyBatis使用resultMap如何解決列名和屬性名不一致
這篇文章主要介紹了MyBatis使用resultMap如何解決列名和屬性名不一致的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Spring Boot jar可執(zhí)行原理的徹底分析
這篇文章主要給大家介紹了關(guān)于Spring Boot jar可執(zhí)行原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07