logback使用MDCFilter日志過(guò)濾源碼解讀
序
本文主要研究一下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來(lái)決定是否打印日志。
以上就是logback使用MDCFilter日志過(guò)濾源碼解讀的詳細(xì)內(nèi)容,更多關(guān)于logback MDCFilter日志過(guò)濾的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于SpringBoot獲取IOC容器中注入的Bean(推薦)
本文通過(guò)實(shí)例代碼給大家詳解了springboot獲取ioc容器中注入的bean問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05
Mybatis實(shí)現(xiàn)分頁(yè)的注意點(diǎn)
Mybatis提供了強(qiáng)大的分頁(yè)攔截實(shí)現(xiàn),可以完美的實(shí)現(xiàn)分功能。下面小編給大家分享小編在使用攔截器給mybatis進(jìn)行分頁(yè)所遇到的問(wèn)題及注意點(diǎn),需要的朋友一起看看吧2017-07-07
java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解
這篇文章主要介紹了java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09
關(guān)于Jmeter接口測(cè)試實(shí)戰(zhàn)-Cookies
這篇文章主要介紹了關(guān)于Jmeter接口測(cè)試實(shí)戰(zhàn)-Cookies問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Java中controller層如何接收帶參數(shù)的查詢(xún)
本文主要介紹了Java中controller層如何接收帶參數(shù)的查詢(xún),在控制器層接收帶參數(shù)的查詢(xún)可以通過(guò)多種方式實(shí)現(xiàn),下面就詳細(xì)的介紹一下,感興趣的可以了解一下2023-08-08
SpringBoot配置數(shù)據(jù)庫(kù)密碼加密的方法
由于系統(tǒng)安全的考慮,配置文件中不能出現(xiàn)明文密碼的問(wèn)題,本文就給大家詳細(xì)介紹下springboot配置數(shù)據(jù)庫(kù)密碼加密的方法,下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧,需要的朋友可以參考下2023-08-08

