log4j2之filter

log4j2使用filter过滤日志 笔者语录: 近一段时间感情、事业、家庭都挺闹心,感觉走到人生的转折点了;刚开始以为必须有所舍弃才行,直到读了一本时间&精力相关的书后,才明白过来:合理利用时间,未必不可兼顾,加油打工人。 背景说明:   log4j2作为log4j的升级版本,其性能自然是大大优于log4j的,同时其其性能又是优于logback的,甚至在部分领域,log4j2的性能远超logback几个数量级。   log4j2的亮点主要在这几个方法进行体现:异步、并发、配置优化、插件机制等。本文初步学习基于log4j2插件机制的F 阅读详情
  1. 概述
    在平时的开发过程中,我们一般都会选择将将日志级别设定为DEBUG甚至更低,这样当出现问题时可以知晓更多,更详细的信息,方便问题的排查;但万事有利必有弊,详细也意味着繁琐,大量嘈杂的日志信息可能会将你真正关注的日志内容淹没掉,加大查找难度。因此最近同事提出了一个动态筛选日志信息的优化需求让我十分感兴趣。

  2. 思考
    类似的需求,最容易想到的简单方法就是在进行日志输出时,谨慎选择甚至自定义日志级别,但是考虑到框架里的日志级别不受控制,随意自定义日志级别徒劳增加开发人员的记忆负担等等缺陷,这个想法在出现的瞬间基本就被判了死刑。
    通过查阅log4j2官网,最终发现其提供的Filter机制应该是能够满足本次需求的。

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

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

  1. 配置
    log4j2中的Filter可以配置在四个位置,由全局到局部依次是 Context-wide,Logger ,Appender ,Appender Reference。下面给出一个具体的配置示例代码:
<Configuration status="TRACE" monitorInterval="5" packages="com.kanq.extend.cat.log4j2">
     <Filters>
     <!-- 全局级别Filter -->
        <LevelRangeFilter minLevel="DEBUG" maxLevel="ERROR" onMatch="DENY"></LevelRangeFilter>
      </Filters>

  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <!-- Appender级别的Filter -->
      <BurstFilter level="INFO" rate="16" maxBurst="100"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>    

  <Loggers>
     <!-- Logger级别的Filter -->
    <Root level="error">
      <MapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
        <KeyValuePair key="eventId" value="Login"/>
        <KeyValuePair key="eventId" value="Logout"/>
      </MapFilter>
    </Root>

    <Logger name="TestJavaScriptFilter" level="trace" additivity="false">
       <!-- AppenderRef级别的Filter -->
      <AppenderRef ref="List">
        <ScriptFilter onMatch="ACCEPT" onMisMatch="DENY">
          <ScriptRef ref="filter.js" />
        </ScriptFilter>
      </AppenderRef>
    </Logger>
  </Loggers>

</Configuration>
  1. log4j2提供的过滤器功能简述(基于log4j2.13.3)
    在这里插入图片描述

  2. 执行流程
    这里贴一下在单元测试下的log4j2调用执行堆栈图(对应的配置文件是上面配置中的全局级别Filter)。
    执行堆栈图
    从以上堆栈图中,我们大致可以得到如下信息:
    每次的日志记录行为都会涉及到Filter的回调,这也是我们所配置的Filter能够生效的原因。
    我们还可以看到设计模式之组合模式的经典应用,以对外提供统一的调用API。

  3. 测试代码
    参考文章 log4j2使用filter过滤日志

  4. 注意
    配置文件中节点的顺序, 全局Filter节点 必须放在节点之后。 否则会出现意料不到的问题。例如本人碰到的就是 替换失败。

SpringBoot 整合 Log4j2 日志框架 前言 代码运行日志对于项目来说十分重要。本文记录的是 SpringBoot 与 Log4j2 的整合配置过程,至于其他日志框架和 Log4j2 的对比,小伙伴们可自行查阅资料。 环境 JDK 8 Gradle 6.7 准备 排除 Logback 依赖 先排除 SpringBoot 默认使用的 Logback 日志框架,在 build.gradle 里添加下面的配置。 configurations { implementation.exclude module: 'spring-boot-sta. 阅读详情

相关推荐

log4j2(二) 自定义filter-ThreadFilter根据线程名过滤日志

背景 项目最新接入了一个sdk,但是这个SDK打印了很多无关紧要的DEBUG日志,造成了严重的信息干扰,现在想去掉这个SDK中指定线程的DEBUG日志 解决方案 使用Log4j2的插件扩展功能自定义一个插件-ThreadFilter, 参考链接中的Filter部分 代码示例 Java代码 package com.test.filter; import org.apache.commons.lan...

sweetyi的专栏 3558

Log4j2的Filters配置详解

日志共有8个级别,日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL。Filter (过滤器)可以通过ACCEPT(接受)DENY(拒绝)or三种设置,来对不同级别的日志进行过滤,

张紫娃的博客 3654

Windows下CMake的下载与安装详解

目录一、CMake介绍二、CMake的下载与安装 一、CMake介绍 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 二、CMake的下载与安装 CMake下载链接:https://cmake.org/download/。 下载最新稳定版即可(Latest Release): 下载完成后,单击“Next”按钮,在下图中勾选“I acce

Wendy的博客 8万+

利用log42框架自定义日志过滤

任务背景: 车联网业务TSP网关打印的日志接入es数据量过大,每小时基本有上亿条日志,快扛不住了。 本着降本增效的原则,需要实现tbox白名单日志打印功能。 框架选择 logback log4j2 日志框架的选择网上已经有很多文章,我是参考了如下几篇文章,加上程序中原有框架也是log4j2,所以想着继续延用并在其基础上优化吧。 纠结哇!日志框架选型,Logback 还是 Log4j2? 转载 Logback与Log4j2日志框架性能对比与调优 Logback 对比 Log4j2 功能设计 程序启动

向往的生活 2306

无刷直流电机矢量控制(四):基于滑模观测器的无传感器控制

无刷直流电机矢量控制,采用转速、电流双环控制,电流环dq解耦,d轴采用id=0控制,q轴采用转速外环。采用滑模观测器(SMO),根据电压电流信息进行电机位置角度动态估算,模型可直接运行,转速和角度跟踪精度较高。 本文整理了该方法的基本原理,介绍了在MATLAB/Simulink中的建模和仿真过程,最后附上完整的模型文件。 一、基本原理 滑模观测器(下文简称SMO)是基于滑模变结构控制方法的一种状态观测器。其针对无刷直流电机转子位置估算的实现过程如下。 假设采用矢量控...

Forster-C的博客 6868

Codex本地部署指南:从环境配置到API集成实战

Codex作为OpenAI推出的代码生成模型,能够根据自然语言描述自动生成代码片段,大幅提升开发效率。这次我们重点分析Codex的本地部署方案、硬件门槛、接口调用方式和实际使用效果,帮助开发者判断是否值得投入时间部署。 从技术架构看,Codex基于GPT-3模型微调,专门针对代码生成任务优化。最新版本支持多种编程语言,包括Python、JavaScript、Java、C++等主流语言。对于国内开发者来说,最关心的是能否在本地环境稳定运行,以及是否需要特殊网络配置。 1. 核心能力速览 能力项 技术说明 模型

weixin_33309048的博客 525

【log4j2日志框架】敏感字符过滤

0、背景 zookeeper服务端所使用的日志框架被我替换为了log4j2,zk的sessionid又被负责安全的大佬评估为敏感信息,不能直接打印,所以要想一个在不修改源码的情况快速解决sessionid打印屏蔽的办法。 1、log4j2的replace功能 很多日志框架都有过滤替换的功能,log4j2也不例外,支持正则替换。 先看zk的sessionid生成方法 sessionid高位为服务id,中间为时间戳,低位为递增序列,最大值为Long的最大值。 log4j2.properties的pattern

weixin_36142042的博客 3089

基于航位推算与多传感器融合的高精度避障小车设计

航位推算(Dead Reckoning)是一种在无外部定位信号下通过里程计与惯性测量单元(IMU)持续积分估计位姿的基础导航方法,其核心在于运动学建模、误差累积抑制与多源数据融合。该技术具备低依赖、高实时、强确定性等工程优势,广泛应用于服务机器人、AGV、竞赛无人平台等受限环境下的自主导航系统。结合编码器高分辨率测距与九轴IMU姿态解算,可显著抑制纯里程计漂移,提升短时定位精度至厘米级。本文以全国大学生电子设计竞赛K题为背景,深入实现了一种面向确定性场地的离线建图+航位推算双模协同架构,重点解决嵌入式资源约

weixin_36328210的博客 81

Log4j2研究之Filter

作为框架必备的基本组件之一的Filter,在log4j2中同样存在并处于相当重要的地位。本文我们将对其执行逻辑,继承体系等等进行一番简单的探索。

夫礼者的专栏 1万+

NC65增加自定义参照并且参照数据要根据选择的财务组织过滤

1、首先定义一个参照类 package nc.pub.jzcm.ref; import nc.ui.bd.ref.AbstractRefModel; import nc.ui.bd.ref.IRefDocEdit; import nc.ui.bd.ref.IRefMaintenanceHandler; public class PMPrPayDefaultRefModel extends AbstractRefModel { public PMPrPayDefaultRefModel(){ ...

xyl的博客 3495

汽车标定技术(七)--英飞凌TC3xx_Overlay实现页切换

今天说要开个专栏讲讲XCP标定,但在将标定之前,先把英飞凌专门为标定功能设计overlay功能讲解清楚。

认真搞搞汽车MCU 4019

Log4j2 Filter配合ACM(Nacos)实现日志降级

原有日志降级实现方式为使用LogUtil工具类,在工具类中判断ACM状态实现日志降级,缺点很明显,打印日志中的行号是LogUtil方法的行号,而不是原始代码的行号。 @Slf4j public class LogUtil { public static void logInfo(String format, Object... arguments){ if(!AcmSwitch.logInfoSwitchON){ return; }

DavidSoCool的博客 705

完整 Bootloader 框架

本文详细介绍了嵌入式系统中Bootloader的完整框架设计。主要内容包括:1.Bootloader的核心功能模块,如应用启动、命令交互、下载功能、Flash烧写和调试维护;2.模块化设计框架,包含启动代码、驱动层、协议实现等组件;3.典型工作流程和关键模块实现,如命令行接口、命令注册机制、Flash操作等;4.应用跳转前的准备工作和安全扩展设计,如加密校验、OTA支持等。文章强调了一个成熟Bootloader在系统维护、升级和安全中的重要性,建议采用模块化、可扩展的设计方法。

m0_49476241的博客 1337

log4j2 Filter用法详解

log4j2 Filter用法详解 主要说下组合过滤器 CompositeFilter ,比较常用 <Filters> 是组合过滤器额标签,它包含的子标签是具体的过滤器,这三个具体过滤器分别是日志等级过滤器,正则表达式过滤器和时间过滤器。 需要说明的是onMatch和onMismatch可以选择的值及其含义。可选的值分别是,ACCE...

weixin_30752377的博客 2607

DSP2837X CLA开发实战教程

摘要: 本文详细解析TI C2000 DSP中CLA协处理器的开发流程,以TMS320F28377D的cla_divide案例为例,展示浮点除法验证的实现方法。从基础配置(消息RAM管理、任务触发)到高级调试(ePWM计时、断点设置),涵盖全流程开发要点。重点分析CLA编程约束(禁用标准库、数学优化)、多任务调度及常见问题解决方案(如死锁、数据同步)。提供FPGA协同加速、电机控制等扩展方向,并推荐官方例程与硬件平台(如创龙TL2837xF-EVM)。开发时需注意.cla文件语法支持及调试技巧,以充分发挥C

6760

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Log4j2 高级插件开发指南:自定义 Appender、Filter 与注解深度解析使用

讲解如何利用 @Plugin、@PluginFactory、@PluginBuilderFactory 等核心注解开发自定义 Appender、Filter 和日志级别。内容涵盖从基础插件创建到复杂的建造者模式实现,包括参数验证、配置注入、性能优化等高级特性,并提供了完整的 XML 配置

肖哥弹架构博客 931

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Flink Log4j 2.x使用Filter过滤日志类型

Flink Log4j 2.x使用Filter过滤日志类型(区别INFO、ERROR)

大数据开发、JAVA开发、人工智能AI 1776

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Log4j2--过滤器Filter

Log4j2的过滤器功能使用比较灵活,可以在三钟标签(对应下面类图中的三个类)中添加过滤器Filter,一是在配置文件的<configuration> 标签下,第二是在<loggers>,第三是在<appenders>标签下。 下图摘自用户手册第二章Architecture 过滤器也有很多种,具体可以参考手册的第十一章Filters,大家可以...

weixin_30751947的博客 477

log4j2手册筛选器filter翻译

四个位置设置筛选器 Context-wide Filters直接在配置中配置。这些筛选器拒绝的事件将不会传递给记录器进行进一步处理。一旦事件被上下文范围的筛选器接受,它将不会被任何其他上下文范围的筛选器求值,也不会使用记录器的级别来筛选事件。但是,Appender和 Logger将评估该事件。 Logger是在指定的Logger上配置的。这些是在上下文范围的筛选器和日志记录器的日志级别之后计算的。...

linux__little_white的博客 1264

Log4j2配置及与Logback对比

Log4j2 使用和配置 一、Maven配置 1、与SpringBoot集成 &lt;!--====================logrelated--&gt; &lt;dependency&gt;&lt;!--exclude掉spring-boot的默认log配置--&gt; &lt;groupId&gt;org.springf...

zollty的专栏 1万+

Log4j2介绍和特性实例(四)--过滤器Filter

Log4j2介绍和特性实例(四)--过滤器Filter 转载:https://blog.youkuaiyun.com/chenhaotong/article/details/50487557 Log4j2的过滤器功能使用比较灵活,可以在三钟标签(对应下面类图中的三个类)中添加过滤器Filter,一是在配置文件的<configuration> 标签下,第二是在&l...

stay hungry ! stay foolish! 817

log4j2 java 记录日志_log4j2 项目日志组件的实例代码

在项目运行过程中,常常需要进行功能调试以及用户行为的跟踪和记录,部分人习惯使用System.out,但这并不建议,它仅仅是使用方便但不便于维护也无扩展性。相比log4j的话,log4j可以控制日志信息的输送目的地、输出格式以及级别等等,使我们能够更加细致地控制日志的生成过程。Log4j2是对Log4j1的升级,在性能和功能上有显著的改进,包括多线程中吞吐量的增强、占位符的支持、配置文件自动重新加载...

weixin_30569443的博客 696

【Java从0到架构师】日志处理 - SLF4J、Logback、Log4j 2.x

SpringBoot - 日志处理 - JCL Java 从 0 到架构师目录:【Java从0到架构师】学习记录 Gitee 代码:https://gitee.com/szluyu99/mj_java_frame/tree/master/04_SpringBoot

萌宅鹿的技术小屋 573

妈妈再也不用担心我搞不懂——log4j/logback/log4j2原理了

本文深入浅出地介绍log4j、logback、log4j2的核心原理,通俗易懂。

Saintyyu的博客 1107

java定义log4j2_【Java】log4j2教程

重点了解log4j2的工作过程和涉及的主要组件主要配置文件log4j2.xml工作过程和主要组件类图工作过程:log4j2将一次信息的输出定义为一个LogEvent, 这个事件像流水一样具有源头、流经的管道以及终点。源头对应的就是源代码中的log.info(), log.error()等调用;管道就是Filter,经过这些Filter时,有的LogEvent会被过滤掉,过滤规则是自定义的,比如可以...

weixin_29710393的博客 296
上一篇: log4j是如何获取logger的
下一篇: java位运算符
MrMoving
博客等级 码龄10年 54粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值