筆者語錄: 我發現我喜歡搗鼓一些小玩意兒,雖然官網(見文末)寫得很明白了,但是咱們對感興趣的部分來敲一遍代碼好吧。
過濾器簡介:
簡介
logback具有過濾器支持。logbcak允許給日志記錄器appender配置一個或多個Filter(或者給整體配置一個或多個TurboFilter),來控制:當滿足過濾器指定的條件時,才記錄日志(或不滿足條件時,拒絕記錄日志)。logback支持自定義過濾器,當然logback也自帶了一些常用的過濾器,在絕大多數時候,自帶的過濾器其實就夠用了,一般是不需要自定義過濾器的。
logback提供的過濾器支持主要分兩大類
ch.qos.logback.core.filter.Filter
ch.qos.logback.classic.turbo.TurboFilter
過濾器 | 來源 | 說明 | 相對常用 |
---|---|---|---|
LevelFilter | Filter | 對指定level的日志進行記錄(或不記錄),對不等于指定level的日志不記錄(或進行記錄) | 是 |
ThresholdFilter | Filter |
對大于或等于指定level的日志進行記錄(或不記錄),對小于指定level的日志不記錄(或進行記錄) 提示:info級別是大于debug的 |
是 |
EvaluatorFilter | Filter | 對滿足指定表達式的日志進行記錄(或不記錄),對不滿足指定表達式的日志不作記錄(或進行記錄) | 是 |
MDCFilter | TurboFilter | 若MDC域中存在指定的key-value,則進行記錄,否者不作記錄 | 是 |
DuplicateMessageFilter | TurboFilter | 根據配置不記錄多余的重復的日志 | 是 |
MarkerFilter | TurboFilter | 針對帶有指定標記的日志,進行記錄(或不作記錄) | 否 |
… | … | … | … |
若過濾器已經返回了需要記錄,那么就一定會對該日志進行記錄(不論當前日志的level是否大于等于系統設置的最低日志級別)。
TurboFilter的性能是優于Filter的,這是因為TurboFilter的作用時機是在創建日志事件ILoggingEvent對象之前,而Filter的作用時機是在創建之后。若一個日志注定是會被過濾掉不記錄的,那么創建ILoggingEvent對象(包括后續的參數組裝方法調用等)這個步驟無疑是非常消耗性能的。
過濾器的FilterReply狀態枚舉:
對于Filter而言,需不需要記錄日志,取決于ch.qos.logback.core.filter.Filter#decide方法的返回:
Filter與TurboFilter自帶的幾種常用過濾器
對于TurboFilter而言,需不需要記錄日志,取決于ch.qos.logback.classic.turbo.TurboFilter#decide方法的返回:
可以看到,返回的都是FilterReply這個枚舉:
FilterReply有三種枚舉值:
DENY:表示不用看后面的過濾器了,這里就給拒絕了,不作記錄。
NEUTRAL:表示需不需要記錄,還需要看后面的過濾器。若所有過濾器返回的全部都是NEUTRAL,那么需要記錄日志。
ACCEPT:表示不用看后面的過濾器了,這里就給直接同意了,需要記錄。
過濾器的使用(示例):
使用LevelFilter的logback.xml(示例):
測試一下:
編寫測試方法:
運行方法,產出日志:
使用ThresholdFilter的logback.xml(示例):
測試一下:
編寫測試方法:
運行方法,產出日志:
使用EvaluatorFilter的logback.xml(示例):
需要引入額外的解析庫依賴janino:
<dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.1.2</version> </dependency>
logbaxk.xml
測試一下:
編寫測試方法:
運行方法,產出日志:
使用MDCFilter的logback.xml(示例):
測試一下:
編寫測試方法:
運行方法,產出日志:
自定義過濾器:
自定義Filter:
編寫自定義Filter
在logback.xml中配置使用此過濾器
測試一下:
編寫測試方法:
運行方法,產出日志:
自定義TurboFilter:
編寫自定義TurboFilter
在logback.xml中配置使用此過濾器
測試一下:
編寫測試方法:
運行方法,產出日志:
logback使用filter過濾日志,初步學習完畢!
以上這篇logback使用filter過濾日志操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/justry_deng/article/details/108074525