java 日志框架 详解_java日志框架系列(9):logback框架过滤器(filter)详解
過濾器放在了logback-classic模塊中。
1.logback-classic模塊中過濾器
分類(2種):常規過濾器、TurboFilter過濾器。
1.常規過濾器
常規過濾器可以通過自定義進行條件篩選過濾。
目前logback-classic中有2個常規過濾器:級別過濾器(LevelFilter)、臨界值過濾器(ThresholdFilter)。在logback-core中還有一個求值過濾器(EvaluatorFilter)。
1.自定義過濾器
創建自定義過濾器很容易,只需要繼承Filter抽象類并實現decide()方法。
下面就通過范例來了解如何創建自定義過濾器吧。
1.范例
功能:自定義 SampleFilter 類,當記錄事件的消息字段包含字符串“sample”時,它的 decide
方法返回 ACCEPT,其他情況下返回 NEUTRAL。
步驟:(2步)
1.創建繼承Filter抽象類的Sample類并實現decide()方法。
2.在xml配置文件中配置過濾器。
定義過濾器SampleFilter,代碼如下:
public class SampleFilter extends Filter{
@OverridepublicFilterReply decide(ILoggingEvent event) {if (event.getMessage() != null &&event.getMessage().contains("sample")) {returnFilterReply.ACCEPT;
}else{return FilterReply.NEUTRAL; }
}
}
配置xml配置文件,代碼如下:
match就是匹配的意思,那mismatch當然就是不匹配啦。
由于常規過濾器可以根據事件包含的某些信息進行過濾,那么當然可以根據級別進行過濾了。下面介紹一下級別過濾器:
1.級別過濾器(LevelFilter)
級別過濾器xml配置示例:
這個配置表示:當級別為INFO時,decide()方法會響應ACCEPT;否則響應DENY。
標簽包含3個子標簽: 、 、。
功能:?用于指定過濾的級別。
功能:指定級別匹配時響應的值。值為FilterReply的枚舉。
功能:指定級別不匹配時響應的值。值為FilterReply的枚舉。
FilterReply的值:ACCEPT 、NEUTRAL、DENY。
2.臨界值過濾器(ThresholdFilter)
臨界值過濾器xml配置示例:
這個配置表明當級別等于或高于中的子標簽指定的級別時,decide()方法會響應NEUTRAL;否則decide方法會響應DENY。
2.TurboFilter過濾器
常用的TurboFilter過濾器(3類):MDCFilter、MarkerFilter、DuplicateFilter。
TurboFilter過濾器與常規過濾器作用范圍不同。
常規過濾器Filter作用范圍:僅僅是某個logger。如果與這個loggerA關聯的appenderB中配置了常規過濾器C,那么每當這個loggerA發起記錄請求的時候都會調用這個常規過濾器C。但是未與appenderB關聯的logger發起記錄請求時無法調用這個常規過濾器C。
TurboFilter過濾器作用范圍:整個Logger上下文。就是所有的logger發起記錄請求時都會調用這個TurboFilter類型過濾器。
根據他們的作用范圍不同,因此我們可以猜測出在配置文件中他們所處的位置肯定是不同的。
過濾器位置
常規過濾器Filter位置:位于appender內。常規過濾器用標簽,是的子標簽。
TurboFilter過濾器位置:位于configuration內。TurboFilter過濾器用標簽,是子標簽。
1.自定義TurboFilter過濾器
想要自定義TurboFilter過濾器,必須創建一個類,且該類必須繼承TurboFilter抽象類并實現decide()方法。
下面我們通過示例來了解一下如何創建自定義TurboFilter過濾器。
創建并使用自定義TurboFilter過濾器步驟(2步):
1.創建繼承TurboFilter抽象類的類SampleTurboFilter。
2.在xml配置文件中配置TurboFilter過濾器。
示例:
packagechapters.filters;importorg.slf4j.Marker;importorg.slf4j.MarkerFactory;importch.qos.logback.classic.Level;importch.qos.logback.classic.Logger;importch.qos.logback.classic.turbo.TurboFilter;importch.qos.logback.core.spi.FilterReply;public class SampleTurboFilter extendsTurboFilter {
String marker;
Marker markerToAccept;
@OverridepublicFilterReply decide(Marker marker, Logger logger, Level level,String format, Object[] params, Throwable t) {if (!isStarted()) {returnFilterReply.NEUTRAL;
}if((markerToAccept.equals(marker))) {returnFilterReply.ACCEPT;
}else{returnFilterReply.NEUTRAL;
}
}publicString getMarker() {returnmarker;
}public voidsetMarker(String markerStr) {this.marker =markerStr;
}
@Overridepublic voidstart() {if (marker != null && marker.trim().length() > 0) {
markerToAccept=MarkerFactory.getMarker(marker);super.start();
}
}
}
上面的 TurboFilter 接受包含特定 marker 的事件。如果上述 marker 未找到,則把任務交給過濾器鏈里的下一個過濾器。
下面在配置文件中使用自定義的TurboFilter過濾器。?配置文件如下所示:
2.logback-classic中直接使用的TurboFilter過濾器
logback-classic實現的TurboFilter過濾器(2種):MDCFilter、MarkerFilter。
1.MDCFilter過濾器介紹
MDCFilter 類檢查在 MDC 里是否存在一個給定值,從而決定響應哪個值(ACCEPT 、NEUTRAL 、DENY)。
配置如下:
注意:標簽在標簽外面。
2.MarkerFilter過濾器介紹
MarkerFilter會檢查與記錄事件相關聯的某個特定marker是否存在,從而決定響應哪個值(ACCEPT 、NEUTRAL 、DENY)。
配置如下:
3.重復消息過濾器(DuplicateMessageFilter)
重復消息過濾器也是TurboFilter過濾器的一種。
重復消息過濾器的配置如下:
2.logback-core模塊中的過濾器
logback-core中只包含了求值過濾器,但是求值過濾器是一個抽象類。
求值過濾器也是有一個常規過濾器。
1.求值過濾器(EvaluatorFilter)
總結
以上是生活随笔為你收集整理的java 日志框架 详解_java日志框架系列(9):logback框架过滤器(filter)详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 字节 操作_实例解析Java
- 下一篇: java编写简单计算器_编写java程序