最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

log4j2使用filter過濾日志方式

 更新時(shí)間:2021年12月24日 10:59:50   作者:justry_deng  
這篇文章主要介紹了log4j2使用filter過濾日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

背景說明

log4j2作為log4j的升級(jí)版本,其性能自然是大大優(yōu)于log4j的,同時(shí)其其性能又是優(yōu)于logback的,甚至在部分領(lǐng)域,log4j2的性能遠(yuǎn)超logback幾個(gè)數(shù)量級(jí)。 ??

log4j2的亮點(diǎn)主要在這幾個(gè)方法進(jìn)行體現(xiàn):異步、并發(fā)、配置優(yōu)化、插件機(jī)制等。本文初步學(xué)習(xí)基于log4j2插件機(jī)制的Filter。

Filter.Result的三種過濾結(jié)果

log4j2走過濾器的邏輯后,會(huì)返回對(duì)應(yīng)的過濾Result結(jié)果,以控制是否記錄日志、怎樣記錄日志。過濾器的結(jié)果有:

在這里插入圖片描述

  • ACCEPT:(不需要再走后面的過濾器了,)需要記錄當(dāng)前日志。
  • NEUTRAL:需不需要記錄當(dāng)前日志,由后續(xù)過濾器決定。若所有過濾器返回的結(jié)果都是NEUTRAL,那么需要記錄日志。
  • DENY:(不需要再走后面的過濾器了,)不需要記錄當(dāng)前日志。

提示:log4j2的此機(jī)制與logback是一樣的。

log4j2提供的過濾器(功能簡(jiǎn)述)

提示: 下圖基于log4j2.13.3。

在這里插入圖片描述

過濾器 說明 是否常用
StringMatchFilter 如果格式化后(即:最終)的日志信息中包含${指定的字符串},則onMatch,否則onMismatch 即: msg.contains(this.text) ? onMatch : onMismatch;
LevelRangeFilter 若${maxLevel} <= 日志級(jí)別 <= ${minLevel}, 則onMatch,否則onMismatch 如: 即為只記錄日志info及warn級(jí)別的日志。
RegexFilter 如果日志信息匹配${指定的正則表達(dá)式},則onMatch,否則onMismatch 注:可通過useRawMsg屬性來控制這個(gè)日志信息是格式化處理后(即:最終)的日志信息,還是格式化處理前(即:代碼中輸入)的日志信息。
ThresholdFilter 若日志級(jí)別 >= ${指定的日志級(jí)別}, 則onMatch,否則onMismatch
LevelMatchFilter 如果日志級(jí)別等于${指定的日志級(jí)別},則onMatch,否則onMismatch
ThreadContextMapFilter 通過context(可以理解為一個(gè)Map)中對(duì)應(yīng)的key-value值進(jìn)行過濾 注:上下文默認(rèn)是ThreadContext,也可以自定義使用ContextDataInjectorFactory配置ContextDataInjector來指定。
DynamicThresholdFilter 若上下文中包含指定的key,則觸發(fā)DynamicThresholdFilter生效;若該key對(duì)應(yīng)的value值等于任意一個(gè)我們指定的值,那么針對(duì)本條日志,可記錄日志級(jí)別的約束下限調(diào)整為指定的級(jí)別 注:上下文默認(rèn)是ThreadContext,也可以自定義使用ContextDataInjectorFactory配置ContextDataInjector來指定。 示例說明:<DynamicThresholdFilter key="loginRole" defaultThreshold="ERROR" onMatch="ACCEPT" onMismatch="NEUTRAL"><KeyValuePair key="admin" value="DEBUG"/><KeyValuePair key="user" value="warn"/></DynamicThresholdFilter>配置,有以下情況: 情況一:存在鍵loginRole,假設(shè)從上下文(可以理解為一個(gè)Map)中取出來的對(duì)應(yīng)的值為user,那么此時(shí),對(duì)于日志級(jí)別大于等于warn的日志,會(huì)走onMatch;其它的日志級(jí)別走onMismatch。 情況二:存在鍵loginRole,假設(shè)從context(可以理解為一個(gè)Map)中取出來的對(duì)應(yīng)的值為admin,那么此時(shí),對(duì)于日志級(jí)別大于等于debug的日志,會(huì)走onMatch;其它的日志級(jí)別走onMismatch。 情況三:【上下文(可以理解為一個(gè)Map)中,不存在鍵loginRole】或【存在鍵loginRole,但從日志上下文中取出來的值(假設(shè))為abc, 沒有對(duì)應(yīng)的KeyValuePair配置】,那么此時(shí)<DynamicThresholdFilter key="userRole" defaultThreshold="AAA" onMatch="BBB" onMismatch="CCC">等價(jià)于<LevelMatchFilter level="AAA" onMatch="BBB" onMismatch="CCC">。
CompositeFilter 組合過濾器,即:按照xml配置中的配置,一個(gè)過濾器一個(gè)過濾器的走,如果在這過程中,任意一個(gè)過濾器ACCEPT或DENY了,那么就不會(huì)往后走了,直接返回對(duì)應(yīng)的結(jié)果。
TimeFilter 如果記錄日志時(shí)的當(dāng)前時(shí)間落在每天指定的時(shí)間范圍[start, end]內(nèi),則onMatch,否則onMismatch 如:<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="DENY"/>。
ScriptFilter 是否匹配取決于指定的腳本返回值是否為true
DenyAllFilter This filter causes all logging events to be dropped
BurstFilter 對(duì)低于或等于${指定日志級(jí)別}的日志,進(jìn)行限流控制
NoMarkerFilter 如果從對(duì)應(yīng)事件對(duì)象獲取(LogEvent#getMarker)到的marker為null, 則onMatch,否則onMismatch
MarkerFilter 如果從對(duì)應(yīng)事件對(duì)象獲取(LogEvent#getMarker)到的marker的name值為等于${指定的值}, 則onMatch,否則onMismatch
MapFilter The MapFilter allows filtering against data elements that are in a MapMessage. 注:需要使用org.apache.logging.log4j.Logger進(jìn)行記錄,且記錄org.apache.logging.log4j.message.MapMessage日志,才會(huì)生效。 注:因?yàn)闀簳r(shí)不兼容Slf4j這里不多作說明
StructuredDataFilter The StructuredDataFilter is a MapFilter that also allows filtering on the event id, type and message. 注:需要使用org.apache.logging.log4j.Logger進(jìn)行記錄,且記錄org.apache.logging.log4j.core.filter.StructuredDataFilter日志,才會(huì)生效。 注:因?yàn)闀簳r(shí)不兼容Slf4j這里不多作說明

Filter的作用范圍

log4j2在處理日志時(shí),各個(gè)Filter會(huì)組成過濾鏈,越靠前的Filter越先過濾,自然影響范圍就越大。在log4j2的xml配置文件中,F(xiàn)ilter可以配置在四個(gè)位置,由全局到局部依次是 Context-wide、 Logger和Appender、AppenderReference, 圖示說明:

在這里插入圖片描述

常用過濾器使用示例(文字版代碼見文末鏈接)

StringMatchFilter

log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

LevelRangeFilter

log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

RegexFilter

log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

ThresholdFilter

log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

LevelMatchFilter

log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

ThreadContextMapFilter

示例一: log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

示例二: log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

DynamicThresholdFilter

log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

CompositeFilter

log4j2.xml配置

在這里插入圖片描述

測(cè)試代碼與輸出日志

在這里插入圖片描述

自定義Filter

一般來說,log4j2官方提供的過濾器就足夠我們使用了,如果非要自定義過濾器,可以繼承AbstractFilter,或者直接實(shí)現(xiàn)Filter,這里不再演示自定義過濾器。

更多可見:

https://logging.apache.org/log4j/2.x/manual/filters.html

http://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/filter/

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring IOC與DI核心重點(diǎn)分析

    Spring IOC與DI核心重點(diǎn)分析

    IOC也是Spring的核心之一了,之前學(xué)的時(shí)候是采用xml配置文件的方式去實(shí)現(xiàn)的,后來其中也多少穿插了幾個(gè)注解,但是沒有說完全采用注解實(shí)現(xiàn)。那么這篇文章就和大家分享一下,全部采用注解來實(shí)現(xiàn)IOC + DI
    2022-10-10
  • 使用java數(shù)組 封裝自己的數(shù)組操作示例

    使用java數(shù)組 封裝自己的數(shù)組操作示例

    這篇文章主要介紹了使用java數(shù)組 封裝自己的數(shù)組操作,結(jié)合實(shí)例形式分析了java數(shù)組索引、遍歷等相關(guān)封裝操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • JAVA Spring中讓人頭痛的JAVA大事務(wù)問題要如何解決你知道嗎

    JAVA Spring中讓人頭痛的JAVA大事務(wù)問題要如何解決你知道嗎

    這篇文章主要介紹了Java Spring事務(wù)使用及驗(yàn)證過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • SpringMVC實(shí)現(xiàn)文件上傳與下載

    SpringMVC實(shí)現(xiàn)文件上傳與下載

    這篇文章主要為大家詳細(xì)介紹了SpringMVC實(shí)現(xiàn)文件上傳與下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Idea打War包流程圖文教程

    Idea打War包流程圖文教程

    這篇文章主要給大家介紹了關(guān)于Idea打War包流程的相關(guān)資料,IDEA導(dǎo)出war包的方式與MyEclipse有一點(diǎn)不同,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • JDK17在Windows安裝及環(huán)境變量配置超詳細(xì)的教程

    JDK17在Windows安裝及環(huán)境變量配置超詳細(xì)的教程

    這篇文章主要介紹了JDK17在Windows安裝及環(huán)境變量配置超詳細(xì)的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • java使用jna調(diào)用c#中dll的方法詳解

    java使用jna調(diào)用c#中dll的方法詳解

    前一段時(shí)間接了個(gè)項(xiàng)目,需要用到第三方提供的C#編寫的dll,本身項(xiàng)目是java語(yǔ)言,所以便有了下面這篇文章,本文給大家介紹了關(guān)于java中如何使用jna調(diào)用c#中dll的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • SpringBoot如何優(yōu)雅的處理全局異常

    SpringBoot如何優(yōu)雅的處理全局異常

    這篇文章主要給大家介紹了關(guān)于SpringBoot如何優(yōu)雅的處理全局異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Springcloud seata nacos環(huán)境搭建過程圖解

    Springcloud seata nacos環(huán)境搭建過程圖解

    這篇文章主要介紹了Springcloud seata nacos環(huán)境搭建過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java使用Jsoup連接網(wǎng)站超時(shí)的解決方法

    java使用Jsoup連接網(wǎng)站超時(shí)的解決方法

    jsoup是一個(gè)非常好的解析網(wǎng)頁(yè)的包,用java開發(fā)的,提供了類似DOM,CSS選擇器的方式來查找和提取文檔中的內(nèi)容,提取文檔內(nèi)容時(shí)會(huì)出現(xiàn)超時(shí)的情況,解決方法可看下文
    2013-11-11

最新評(píng)論

怀远县| 九寨沟县| 迭部县| 宁河县| 阳原县| 红原县| 泾川县| 肥西县| 云梦县| 汽车| 台州市| 定西市| 依兰县| 日照市| 桐梓县| 云龙县| 深水埗区| 商河县| 昌图县| 西充县| 宣汉县| 武义县| 孟村| 武邑县| 庐江县| 托里县| 庄河市| 陇西县| 沭阳县| 南安市| 外汇| 廊坊市| 桦川县| 凉山| 龙岩市| 丁青县| 安阳县| 友谊县| 英德市| 迁安市| 青田县|