广告
返回顶部
首页 > 资讯 > 精选 >log4j2如何使用filter过滤日志
  • 804
分享到

log4j2如何使用filter过滤日志

2023-06-22 05:06:10 804人浏览 薄情痞子
摘要

小编给大家分享一下log4j2如何使用filter过滤日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景说明log4j2作为log4j的升级版本,其性能自然是

小编给大家分享一下log4j2如何使用filter过滤日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

背景说明

log4j2作为log4j的升级版本,其性能自然是大大优于log4j的,同时其其性能又是优于logback的,甚至在部分领域,log4j2的性能远超logback几个数量级。   

log4j2的亮点主要在这几个方法进行体现:异步、并发、配置优化插件机制等。本文初步学习基于log4j2插件机制的Filter。

Filter.Result的三种过滤结果

log4j2走过滤器的逻辑后,会返回对应的过滤Result结果,以控制是否记录日志、怎样记录日志。过滤器的结果有:

log4j2如何使用filter过滤日志

  • ACCEPT:(不需要再走后面的过滤器了,)需要记录当前日志。

  • NEUTRAL:需不需要记录当前日志,由后续过滤器决定。若所有过滤器返回的结果都是NEUTRAL,那么需要记录日志。

  • DENY:(不需要再走后面的过滤器了,)不需要记录当前日志。

提示:log4j2的此机制与logback是一样的。

log4j2提供的过滤器(功能简述)

提示: 下图基于log4j2.13.3。

log4j2如何使用filter过滤日志

过滤器说明是否常用
StringMatchFilter如果格式化后(即:最终)的日志信息中包含${指定的字符串},则onMatch,否则onMismatch 即: msg.contains(this.text) ? onMatch : onMismatch;
LevelRangeFilter若${maxLevel} <= 日志级别 <= ${minLevel}, 则onMatch,否则onMismatch 如: 即为只记录日志info及warn级别的日志。
RegexFilter如果日志信息匹配${指定的正则表达式},则onMatch,否则onMismatch 注:可通过useRawMsg属性来控制这个日志信息是格式化处理后(即:最终)的日志信息,还是格式化处理前(即:代码中输入)的日志信息。
ThresholdFilter若日志级别 >= ${指定的日志级别}, 则onMatch,否则onMismatch
LevelMatchFilter如果日志级别等于${指定的日志级别},则onMatch,否则onMismatch
ThreadContextMapFilter通过context(可以理解为一个Map)中对应的key-value值进行过滤 注:上下文默认是ThreadContext,也可以自定义使用ContextDataInjectorFactory配置ContextDataInjector来指定。
DynamicThresholdFilter若上下文中包含指定的key,则触发DynamicThresholdFilter生效;若该key对应的value值等于任意一个我们指定的值,那么针对本条日志,可记录日志级别的约束下限调整为指定的级别 注:上下文默认是ThreadContext,也可以自定义使用ContextDataInjectorFactory配置ContextDataInjector来指定。 示例说明:<DynamicThresholdFilter key="loginRole" defaultThreshold="ERROR" onMatch="ACCEPT" onMismatch="NEUTRAL"><KeyValuePair key="admin" value="DEBUG"/><KeyValuePair key="user" value="warn"/></DynamicThresholdFilter>配置,有以下情况: 情况一:存在键loginRole,假设从上下文(可以理解为一个Map)中取出来的对应的值为user,那么此时,对于日志级别大于等于warn的日志,会走onMatch;其它的日志级别走onMismatch。 情况二:存在键loginRole,假设从context(可以理解为一个Map)中取出来的对应的值为admin,那么此时,对于日志级别大于等于debug的日志,会走onMatch;其它的日志级别走onMismatch。 情况三:【上下文(可以理解为一个Map)中,不存在键loginRole】或【存在键loginRole,但从日志上下文中取出来的值(假设)为abc, 没有对应的KeyValuePair配置】,那么此时<DynamicThresholdFilter key="userRole" defaultThreshold="AAA" onMatch="BBB" onMismatch="CCC">等价于<LevelMatchFilter level="AAA" onMatch="BBB" onMismatch="CCC">。
CompositeFilter组合过滤器,即:按照xml配置中的配置,一个过滤器一个过滤器的走,如果在这过程中,任意一个过滤器ACCEPT或DENY了,那么就不会往后走了,直接返回对应的结果。
TimeFilter如果记录日志时的当前时间落在每天指定的时间范围[start, end]内,则onMatch,否则onMismatch 如:<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="DENY"/>。
ScriptFilter是否匹配取决于指定的脚本返回值是否为true
DenyAllFilterThis filter causes all logging events to be dropped
BurstFilter对低于或等于${指定日志级别}的日志,进行限流控制
NoMarkerFilter如果从对应事件对象获取(LogEvent#getMarker)到的marker为null, 则onMatch,否则onMismatch
MarkerFilter如果从对应事件对象获取(LogEvent#getMarker)到的marker的name值为等于${指定的值}, 则onMatch,否则onMismatch
MapFilterThe MapFilter allows filtering against data elements that are in a MapMessage. 注:需要使用org.apache.logging.log4j.Logger进行记录,且记录org.apache.logging.log4j.message.MapMessage日志,才会生效。 注:因为暂时不兼容Slf4j这里不多作说明
StructuredDataFilterThe StructuredDataFilter is a MapFilter that also allows filtering on the event id, type and message. 注:需要使用org.apache.logging.log4j.Logger进行记录,且记录org.apache.logging.log4j.core.filter.StructuredDataFilter日志,才会生效。 注:因为暂时不兼容Slf4j这里不多作说明

Filter的作用范围

log4j2在处理日志时,各个Filter会组成过滤链,越靠前的Filter越先过滤,自然影响范围就越大。在log4j2的xml配置文件中,Filter可以配置在四个位置,由全局到局部依次是 Context-wide、 Logger和Appender、AppenderReference, 图示说明:

log4j2如何使用filter过滤日志

常用过滤器使用示例(文字版代码见文末链接)

StringMatchFilter

log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

LevelRangeFilter

log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

RegexFilter

log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

ThresholdFilter

log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

LevelMatchFilter

log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

ThreadContextMapFilter

示例一: log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

示例二: log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

DynamicThresholdFilter

log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

CompositeFilter

log4j2.xml配置

log4j2如何使用filter过滤日志

测试代码与输出日志

log4j2如何使用filter过滤日志

以上是“log4j2如何使用filter过滤日志”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: log4j2如何使用filter过滤日志

本文链接: https://www.lsjlt.com/news/302703.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • log4j2如何使用filter过滤日志
    小编给大家分享一下log4j2如何使用filter过滤日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景说明log4j2作为log4j的升级版本,其性能自然是...
    99+
    2023-06-22
  • log4j2使用filter过滤日志方式
    目录背景说明Filter.Result的三种过滤结果log4j2提供的过滤器(功能简述)Filter的作用范围常用过滤器使用示例(文字版代码见文末链接)StringMatchFilt...
    99+
    2022-11-12
  • 如何使用vue过滤器filter
    目录概述定义过滤器过滤器的使用自定义全局过滤器局部过滤器注意事项示例一(局部过滤器)示例二(全局过滤器)概述 在 vue2.0 之前,是有内置过滤器的,在2.0中已经没有内置的过滤器...
    99+
    2022-11-12
  • python如何使用Filter()过滤函数
    小编给大家分享一下python如何使用Filter()过滤函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! Filter()过滤函数filter()函...
    99+
    2023-06-27
  • 如何使用logback实现日志打印过滤
    这篇文章主要为大家展示了“如何使用logback实现日志打印过滤”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用logback实现日志打印过滤”这篇文章吧。logback日志打印过滤1.只...
    99+
    2023-06-20
  • 如何使用filter方法过滤数组
    要使用`filter`方法过滤数组,可以按照以下步骤进行操作:1. 创建一个数组;2. 使用`filter`方法对数组进行过滤;3....
    99+
    2023-10-09
    filter
  • python如何使用filter函数过滤值
    这篇文章主要介绍了python如何使用filter函数过滤值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用filter函数过滤值filter函数用于过滤可迭代对象中的某些...
    99+
    2023-06-27
  • Java过滤器Filter如何使用教程
    这篇“Java过滤器Filter如何使用教程”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java过滤器Filter如何使用...
    99+
    2023-07-05
  • 使用logback实现日志打印过滤
    logback日志打印过滤 1.只打印sql语句以及参数 <?xml version="1.0" encoding="UTF-8" ?> <co...
    99+
    2022-11-12
  • springboot log4j2日志框架整合与使用过程解析
    目录一、引入maven依赖二、添加配置文件log4j2-spring.xml三、自定义配置文件四、测试一下 一、引入maven依赖 Spring Boot默认使用LogBack,但是...
    99+
    2022-11-13
  • 如何使用Filter过滤器中访问getSession()
    本篇内容介绍了“如何使用Filter过滤器中访问getSession()”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Filter过滤器中访...
    99+
    2023-06-26
  • log4j如何过滤掉不必要的日志
    在log4j中,可以通过配置文件或代码来过滤掉不必要的日志。方式一:通过配置文件过滤在log4j的配置文件中,可以使用log4j的级...
    99+
    2023-09-13
    log4j
  • 如何在JavaScript中使用filter方法过滤数组
    本篇文章给大家分享的是有关如何在JavaScript中使用filter方法过滤数组,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript是什么JavaScript是...
    99+
    2023-06-14
  • 如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL
    如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 在 MYSQL 慢查...
    99+
    2022-10-19
  • SpringMVC框架中如何使用Filter实现请求日志打印
    这篇文章主要为大家展示了“SpringMVC框架中如何使用Filter实现请求日志打印”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringMVC框架中如何使用Filter实现请求日志打印”...
    99+
    2023-06-25
  • 如何在Apache日志中过滤出二维码访问记录?
    在网络应用中,二维码已经成为了一种非常重要的信息传递方式。在 Apache 的日志中,可能会记录到很多的二维码访问记录,但是如果直接查看日志文件,可能会比较麻烦。因此,本篇文章将介绍如何在 Apache 日志中过滤出二维码访问记录,并给出相...
    99+
    2023-08-12
    二维码 apache 日志
  • jQuery如何使用过滤器过滤多属性
    这篇文章给大家分享的是有关jQuery如何使用过滤器过滤多属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用过滤器过滤多属性//This precision-based approache...
    99+
    2023-06-27
  • springboot 2.x中利用log4j2调试日志无法关闭如何解决
    本篇文章为大家展示了springboot 2.x中利用log4j2调试日志无法关闭如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。springboot2.x集成log4j2时,始终无法关闭lo...
    99+
    2023-06-20
  • 如何使用RMAN删除过期归档日志
    这篇文章主要介绍“如何使用RMAN删除过期归档日志”,在日常操作中,相信很多人在如何使用RMAN删除过期归档日志问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用RMAN...
    99+
    2022-10-18
  • vue如何使用过滤器
    在vue中使用过滤器的方法:1.新建vue.js项目;2.使用import方法引入filter过滤器;3.全局注册过滤器;4.执行命令直接引用;具体步骤如下:首先,在vue-cli中创建一个vue.js项目;vue create proje...
    99+
    2022-10-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作