文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

log4j2如何使用filter过滤日志

2023-06-22 05:36

关注

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

背景说明

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

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

Filter.Result的三种过滤结果

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

log4j2如何使用filter过滤日志

提示: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过滤日志”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯