日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 日志框架 详解_java日志框架系列(9):logback框架过滤器(filter)详解

發布時間:2025/3/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。