文章轉載自:http://blog.csdn.net/dslztx/article/details/47733127
一、作用
在Logback中有兩種方法去控制某個日誌記錄請求是否有效:一種是比較日誌記錄請求的Level值是否大於等於相應的日誌記錄類實例的Level值;另外一種是配置Filter類實例,Filter類實例的方法比前一種方法更加靈活和強大,它的關注點可以不僅僅限於Level值的比較,也可以關注記錄內容等。
二、分類與配置
Logback中有兩類Filter,一類是Regular Filter;另外一類是Turbo Filter。2.1、Regular Filter
Regular Filter繼承實現"ch.qos.logback.core.filter.Filter"類,調用Regular Filter實例能夠得到3種結果,分別是“DENY, NEUTRAL和ACCEPT”。Regular Filter實例被綁定在Appender實例上,Appender實例上可以綁定一個Regular Filter實例鏈。當該Appender實例被調用時,被綁定的Regular Filter實例鏈中的每個Regular Filter實例會被依次調用,當某個Regular Filter實例被調用返回的結果是"DENY"時,直接拒絕日誌記錄請求;返回的結果是"ACCEPT"時,直接通過日誌記錄請求;返回的結果是"NEUTRAL"時,繼續調用鏈中的下一個Regular Filter實例。
Logback中已經實現的常見的Regular Filter有"ch.qos.logback.classic.filter.LevelFilter","ch.qos.logback.classic.filter.ThresholdFilter","ch.qos.logback.core.filter.EvaluatorFilter"。
比較日誌記錄請求的Level值和LevelFilter中配置的Level值,返回LevelFilter中配置的結果值。
配置舉例:
2.1.2、ch.qos.logback.classic.filter.ThresholdFilter
比較日誌記錄請求的Level值和ThresholdFilter中配置的Level值,當日志記錄請求的Level值小於ThresholdFilter中配置的Level值,日誌記錄請求被判定爲無效。配置舉例:
2.1.3、ch.qos.logback.core.filter.EvaluatorFilter
EvaluatorFilter中可以配置"groovy evaluation expressions"或者"java evaluation expressions",從而可以更加靈活地確定日誌記錄請求過濾的條件。條件的內容可以不僅限於Level值,也可以是日誌記錄內容,日誌記錄時間,MDC內容等等。配置舉例:
2.2、Turbo Filter
Turbo Filter繼承實現"ch.qos.logback.classic.turbo.TurboFilter"類,調用Turbo Filter實例能夠得到3種結果,分別是“DENY, NEUTRAL和ACCEPT”。Turbo Filter和Regular Filter主要有兩點不同:一個是作用域;另一個是作用時機。Regular Filter的作用域跟綁定它的Appender的作用域一致,只有當Appender被調用時,綁定在它上面的Regular Filter才能得到調用;而Turbo Filter的作用域是Logback上下文環境中的全局作用域,每個日誌記錄請求的觸發都能引起Turbo Filter的調用。
Regular Filter的作用時機是在“根據日誌記錄請求(LoggingRequest)得到一個日誌記錄事件(LoggingEvent)”之後,即彼時已經有“LoggingEvent”生成;Turbo Filter的作用時機是在“根據日誌記錄請求(LoggingRequest)得到一個日誌記錄事件(LoggingEvent)”之前,即彼時還沒有"LoggingEvent"生成。
Logback中已經實現的常見的Turbo Filter有:"ch.qos.logback.classic.turbo.DuplicateMessageFilter"。
過濾掉重複記錄內容的日誌記錄請求。
配置舉例:
參考文獻:
[1]http://logback.qos.ch/manual/filters.html