日志文件自动删除功能必不可少,当然你可以让运维去做这事,只是这不地道。而日志组件是一个必备组件,让其多做一件删除的工作,无可厚非。本文就来探讨下 log4j 的日志文件自动删除实现吧。

0.自动删除配置参考样例: (log4j2.xml)

?

如果仅想停留在使用层面,如上log4j2.xml配置文件足矣!

不过,至少得注意一点,以上配置需要基于log4j2, 而如果你是 log4j1.x,则需要做下无缝升级:主要就是换下jar包版本,换个桥接包之类的,比如下参考配置:

?

如果还想多了解一点其运行原理,就跟随本文的脚步吧:

1.自动清理大体运行流程

自动删除工作的运行原理大体流程如下。(大抵都是如此)

1. 加载log4j2.xml配置文件;

2. 读取appenders,并添加到log4j上下文中;

3. 加载 policy, 加载 rollover 配置;

4. 写入日志时判断是否满足rollover配置, 默认是一天运行一次, 可自行添加各种运行测试, 比如大小、启动时;

所以,删除策略的核心是每一次添加日志时。代码验证如下:

?

所以,何时进行删除?答案是在适当的时机,这个时机可以是任意时候。

2. log4j 日志滚动

日志滚动,可以是重命名,也可以是删除文件。但总体判断是否可触发滚动的前提是一致的。我们这里主要关注文件删除。我们以时间作为依据看下判断过程。

?

此处滚动有两个处理点,1. 每个滚动策略可以自行处理业务; 2. RollingFileManager 统一管理触发同步和异步的滚动action;

3. DefaultRolloverStrategy 默认滚动策略驱动

DefaultRolloverStrategy 作为一个默认的滚动策略实现,可以配置多个 Action, 然后处理删除操作。

删除有两种方式: 1. 当次滚动的文件数过多,会立即进行删除; 2. 配置单独的 DeleteAction, 根据配置的具体策略进行删除。(但该Action只会被返回给外部调用,自身则不会执行)

?

4. 符合过滤条件的文件查找

当配置了 max 参数,这个参数是如何匹配的呢?比如我某个文件夹下有很历史文件,是否都会匹配呢?

?

AsyncAction 是一个 Runnable 的实现, 被直接提交到线程池运行. AsyncAction -> AbstractAction -> Action -> Runnable

它是一个统一管理异步Action的包装,主要是管理锁和异常类操作。

?

DeleteAction是我们真正关心的动作。

?

最终,即和想像的一样:找到要查找的文件夹,遍历各文件,用多个条件判断是否满足。删除符合条件的文件。

只是这其中注意的点:如何删除文件的线程安全性;如何保证删除工作不影响业务线程;很常见的锁和多线程的应用。

5.真正的删除

真正的删除动作就是在DeleteAction中配置的,但上面可以看它是调用visitor的visitFile方法,所以有必要看看是如何真正处理删除的。(实际上前面在purge时已经做过一次删除操作了,所以别被两个点迷惑了,建议尽量只依赖于Delete配置,可以将外部max设置很大以避免两处生效)

?

删除策略配置比如:

?

另外说明,之所以能够无缝替换,是因为利用了不同实现版本的 org/slf4j/impl/StaticLoggerBinder.class, 而外部都使用 slf4j 接口定义实现的,比如 org.apache.logging.log4j:log4j-slf4j-impl 包的实现。

总结

到此这篇关于log4j2 自动删除过期日志文件的配置及实现原理解析的文章就介绍到这了,更多相关log4j2自动删除过期日志文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/yougewe/p/13407812.html

java 日志过期删除吗,log4j2 自动删除过期日志文件的配置及实现原理相关推荐

  1. log4j2自动删除_登录样式:log4j 2,上下文,自动清除…全部不附带任何字符串!...

    log4j2自动删除 日志记录-保持操作的时间跟踪-对于任何关键任务系统,无论大小,都至关重要. 我们的Project-X框架也是如此 ,这就是为什么我们希望从一开始就正确地做到这一点. 基于我们在传 ...

  2. Kibana7.9.2设置elasticsearch索引过期时间,到期自动删除

    目录 一.背景 二.设置索引生命周期策略(ILM) 三.手动给索引设置删除策略 四.查看结果 五.自动给索引添加删除策略 六.参考 一.背景 ELK系统里面存放了大量日志索引,只需要保留15天的日志索 ...

  3. log4j2 自动删除过期日志文件配置及实现原理解析

    自动删除配置参考样例: <?xml version="1.0" encoding="UTF-8" ?> <Configuration stat ...

  4. Java 实现固定长度队列,自动删除最早添加的数据

    1. 长度固定,不能太长了,就最近的几条就可以,所以需要固定的队列. 2. 在添加的时候,自动删除最早添加的记录. 3. 输出的时候,倒序输出 简单的代码如下,主要使用了 org.apache.com ...

  5. java ftp定时上传_ftp自动删除,ftp自动删除文件、定时上传文件的方式及java环境配置...

    IIS7服务器管理工具具备所有服务器管理工具的功能,比如批量管理.同时它还有很多的自主研发功能.比如同步操作.到期提醒.数据安全和定期执行.当然适用的系统也有Windows和liunx操作系统.还支持 ...

  6. 接口规范 12. 自动删除相关接口

    12 自动删除相关接口 12.1.查询自动删除任务 用途 查询服务器上的自动删除任务. 自动删除任务是一种运行在服务器上的服务,按照定义的规则自动删除过期的视频内容.例如,对于监控和视频直播类业务,可 ...

  7. Java支持latex,基于Java和LaTeX的文档自动生成技术研究

    基于Java和 LaTeX 的文档 自动生成技术研究 ◆尚宝欣 徐 屹 (东北电力大学理学院,吉林 长春 132012) [摘 要]讨论了结合Java与LaTex 自动生成 PDF文档的方法.针 展名 ...

  8. 对mysql日志进行操作的总结包括 启用,过期自动删除 等

    近段时间一直在研究mysql的日志系统,在网上看了N多mysql日志操作的文章,但都过于零乱,为了让自己以后不再搞忘,特作出以下总结: 1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态, ...

  9. mysql 删除过期日志_【转】对mysql日志进行操作的总结包括 启用,过期自动删除 等...

    近段时间一直在研究mysql的日志系统,在网上看了N多mysql日志操作的文章,但都过于零乱,为了让自己以后不再搞忘,特作出以下总结: 1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态, ...

最新文章

  1. 蓝牙模块hc05原理图_使用步进电机和Android App的蓝牙控制迷你升降机
  2. 丰田chr优惠5万_精打细算还是英朗划算,优惠5万入手英朗,落地8.8万买贵了吗...
  3. fastqc检验时不能执行java_利用fastqc检测原始序列的质量
  4. 算法之动态规划初步(Java版)
  5. DSP学习 -- C语言实现MySQL数据库操作
  6. 如何做到长时间(4 个小时以上)精神专注?
  7. POJ - 2175 Evacuation Plan(最小费用最大流+消圈定理)
  8. SpringSocial简介
  9. Linux如何使用GPG(GNU Privacy Guard)对信息/文件进行加密和解密
  10. 第四回. 实数系的性质
  11. Chrome最新版下载地址
  12. kawamura+maya+picture_[转载]Softimage+Maya(krakatoaMY)+Nuke制作卷浪思路整理
  13. 高等数学学习笔记——第九十二讲——函数项级数收敛与一致收敛
  14. 程序员工资到底有多高?国内哪个城市挣得最多?有没有你在的城市
  15. rap技术原理_学rap最基本的都要学什么
  16. 5大顶级移动UI开发框架
  17. 《算法导论》学习笔记第一章
  18. 各种接口资源整合(持续更新)
  19. 用Python实现栅格计算器中的Con和Power
  20. 计算机前端设计主要学什么软件,学web前端用什么电脑好?

热门文章

  1. 创业之路——网页版面设计收藏
  2. java开发成语的过程_基于JAVA的成语词典接口调用代码实例
  3. 使用PyTorch来进行肺癌早期检测:3、训练模型
  4. 项目管理过程组与知识领域
  5. 高效团队的必备条件有哪些?浅析如何开展团队沟通?
  6. Sun董事长麦克尼利:硅谷牛仔依然愤怒
  7. 徐州工程学院考研计算机,考研【徐州工程学院吧】_百度贴吧
  8. ASIC设计学习笔记——使用Design Compiler进行综合
  9. 线性表-顺序存储结构
  10. 国产化之虚拟ARM64-CPU安装银河麒麟操作系统