當咱們須要對日誌的打印要作一些範圍的控制的時候,一般都是經過爲各個Appender設置不一樣的Filter配置來實現。在Logback中自帶了兩個過濾器實現:ch.qos.logback.classic.filter.LevelFilter
和ch.qos.logback.classic.filter.ThresholdFilter
,用戶能夠根據須要來配置一些簡單的過濾規則,下面先簡單介紹一下這兩個原生的基礎過濾器。html
ch.qos.logback.classic.filter.LevelFilter
過濾器的做用是經過比較日誌級別來控制日誌輸出。下面是一個只記錄日誌級別爲ERROR的例子:java
<appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/error.log</file>ds
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
</encoder>
</appender>
複製代碼
LevelFilter
經過定義日誌級別,並設置匹配與不匹配的處理策略來控制針對某個級別日誌的輸出策略。當咱們要設置多個不一樣級別的日誌策略的時候,若是僅依靠這個過濾器,咱們就要級聯的定義多個filter來控制才能實現,顯然不是很方便,因此此時咱們就可使用ch.qos.logback.classic.filter.ThresholdFilter
過濾器來控制了。好比下面的配置,實現了只記錄WARN及以上級別的控制,比WARN級別低(如:INFO、DEBUG、TRACE)都不會記錄。web
<appender name="WARN_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/warn_error.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
</encoder>
</appender>
複製代碼
經過上述介紹的兩個過濾器來控制日誌的記錄級別已經知足絕大部分的需求,可是可能仍是會出現一些特殊狀況,須要自定義複雜的過濾規則,好比想過濾掉一些框架中的日誌,經過自帶的幾個過濾器已經沒法徹底控制,而且也不但願修改框架源碼來實現。這個時候,咱們就能夠本身來實現過濾器,並配置使用。實現的方式也很簡單,只須要實現Logback提供的ch.qos.logback.core.filter.Filter
接口便可。spring
下面舉一個簡單的例子:app
public class MyFilter extends Filter<ILoggingEvent> {
@Override
public FilterReply decide(ILoggingEvent event) {
if (event.getLevel() == Level.ERROR) {
switch (event.getLoggerName()) {
case "org.springframework.cloud.sleuth.instrument.web.ExceptionLoggingFilter":
return FilterReply.DENY;
}
return FilterReply.ACCEPT;
}
return FilterReply.DENY;
}
}
複製代碼
上面過濾器的功能主要是經過重寫decide
,限制了org.springframework.cloud.sleuth.instrument.web.ExceptionLoggingFilter
類輸出ERROR級別的日誌記錄。在編寫好本身的過濾器實現以後,只須要在Appender中配置使用就能實現本身須要的靈活過濾規則了:框架
<appender name="WARN_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/warn_error.log</file>
<filter class="com.didispace.log.filter.ExceptionClassFilter"></filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
</encoder>
</appender>
複製代碼
更多關於Logback過濾器的內容可參考官方文檔:logback.qos.ch/manual/filt…ide