Tomcat8.5.24日志自动清理(maxDays)功能探究
前言
测试人员反馈tomcat目录下的日志占用空间很大,需要自动清理。接到这个反馈时,想象着应该是一个很简单的功能,tomcat应该已经实现了日志的自动清理功能。于是乎,我先到网上查询了如何自动清除tomcat日志,结果发现搜索结果最靠谱的也就是自己写个定时清理脚本,放入系统启动计划中。卧槽,不是吧,这功能还得自己单独处理!不应该吧!为了解答自己的疑惑,我毅然访问了tomcat官网,凭借着4级英语的水准,畅游其中,找寻答案。
果不其然,解决方案被我找到了。那就是设置日志处理handler的maxDays属性!该方案出现在tomcat-8.5文档介绍中,接下来就开始探索之旅。

一、版本的问题
1.1、一开始以为Tomcat8.5.×的版本都可以,庆幸自己使用的版本是Tomcat8.5.6。于是打开conf / logging.properties,为handler添加了maxDays属性。但是一测试发现不行,没办法开始查看源码。

1.2、经查询org.apache.juli.AsyncFileHandler类存在于tomcat根目录下的 bin / tomcat-juli.jar 包中,可以通过maven进行jar包下载,分析其源码。我跳跃试的尝试了8.5.6, 8.5.15, 8.5.20,这几个版本都没有发现handler的maxDays属性。最终尝试到8.5.24版本时,发现限制日志保存天数的maxDays属性。

1.3、当发现8.5.24版本的tomcat-juli jar包可用后,立马替换到了自己的tomcat中(去掉版本号),重启服务。发现服务启动失败,jar包与当前版本的tomcat不匹配。于是升级tomcat,在官网上下载了tomcat 32-bit/64-bit Windows Service Installer,重新注册服务后,发现自动清理功能生效。
1.4、需要注意的是,这个清理功能按照配置只对catalina,localhost,manager,host-manager 这4类日志文件有效。对于stderr,stdout这两类日志可以通过Tomcat服务管理工具进行设置,过程很简单,将Logging页签下的 Redirect Stdout和Redirect Stderror两项清空后,日志就不再输出了。

1.5、此外还有localhost_access_log 这一类日志,如果也不需要的话,可以在conf / server.xml 文件中,将Host/Value 下面的日志输出注释掉。如下图。

二、日志自动清理(maxDays)实现原理解析
2.1、AsyncFileHandler为指定的一类日志提供处理方案,继承自FileHandler类。FileHandler类中声明有一个maxDays属性,即文件保留天数。默认值是-1,即不执行任何清理操作。

2.2、FileHandler内部启动了一个过期日志文件清理线程,根据设置的maxDays值进行清理。线程启动源码截图如下,具体线程的实现有兴趣的朋友可以自行看看源码。

至此关于tomcat自行清理过期的日志文件功能就简单介绍完了,如果没有用过,可以尝试一下!tomcat版本建议使用8.5.24以上,功能上差强人意,又比自己去写清理脚本的方案好些。鉴于网上关于这块功能的文章较少,希望这篇博文能对你有所帮助。
Tomcat8.5.24日志自动清理(maxDays)功能探究的更多相关文章
- IIS日志自动清理
IIS在运行的过程中日志会不停地增长,若iis的网站被频繁的调用或不当的调用,则会产生很多日志.我在系统运维的时候曾出现过20G的系统盘,由于合作商开发的程序有问题,每几百微秒调用一次web服务,短期 ...
- Linux**系统实现log日志自动清理
Linux系统实现log日志自动清理 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- log4j实现日志自动清理功能
log4j不支持自动清理功能,但是log4j2版本支持,log4j2是log4j的升级版,比logback先进. log4j升级为log4j2(不需要改动代码)https://blog.csdn.ne ...
- Hadoop、Strom集群实现日志自动清理
Hadoop+Storm集群,运行一段时间ZooKeeper等关键进程自动停止运行,经检测是系统磁盘不足 系统磁盘100%: 查找大文件后发现,空间均被ZooKeeper产生的log占用 find / ...
- Linux中添加计划任务与Elasticsearch日志自动清理
一.简述 当日志发送到ELK之后,Elasticsearch随着日志的增加,占用磁盘量会越来越大.这时候,需要我们写角本定期DELETE日志.角本写法,也很简单,只是发送HTTP的DELETE方式到: ...
- python 日志logging设置按天进行保存,保存近7天,过期日志自动清理
参考文章(写的很详细):https://www.cnblogs.com/xujunkai/p/12364619.html 前言: 跑接口自动化或者其他程序运行时,如果只能保存一份log文件,可能会存在 ...
- python日志按天分割,保存近一个月日志,日志自动清理
python日志按天分割,保存近一个月日志 import os import logging import re from logging.handlers import TimedRotatingF ...
- 如何自动清理 KingbaseES SYS_LOG
KingbaseES 初始化完成后,默认不会对 sys_log进行清理.如果需要对sys_log进行自动清理,需要设置相关参数. 与日志自动清理有关的参数(默认值)如下: log_filename | ...
- zookeeper3.4.6配置实现自动清理日志
在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...
随机推荐
- MYSQL问题解决方案:Access denied for user 'root'@'localhost' (using password:YES)
这两天在MyEclipse中开发Web项目时,连接MYSQL数据库,出现问题:Access denied for user 'root'@'localhost' (using password:YES ...
- java项目导出war包
@参考文档 假如项目名称为yanan,进入到yanan目录下打开cmd 执行:jar -cvf yanan.war ./* 命令详解: @参考文档1 @参考文档2 jar:jar工具是个java应用程 ...
- 错误:Unsupported major.minor version 51.0的解决
问题: 在电脑上双击打开一个可执行的jar时报错:Unsupported major.minor version 51.0.原因是版本问题,该jar使用jdk1.7编译,而我电脑装的是jdk1.6. ...
- java获取昨天的日期
Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); String yesterday = new ...
- web技术发展历程--读《大型网站技术架构_核心原理与案例分析》
1 早期的web服务 2 CGI程序的出现.发展.凋零到MVC的兴起 CGI:通用网关接口技术. 随着CGI技术的出现,web服务端可以通过不同的用户请求产生动态页面内容. web服务器将请求数据交给 ...
- java IO(一):File类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- js中常用的方法(数组篇)
1.replace(),根据释义,即为代替,用法为: stringObject.replace(regexp/substr,replacement)括号内前者是待匹配字符串,并用后者代替这个字符串.例 ...
- SpringMVC数据验证(AOP处理Errors和方法验证)
什么是JSR303? JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案. Hibernate Validator 是 Bean Valida ...
- debug时ClassNotFound可能出现的原因
自我总结,欢迎拍砖! 目的:总结ClassNotFound可能出现的原因,方便以后定位该类问题. 原因:当项目中加了新类,debug或run时,报classnotfound,说明没有找到该类的clas ...
- Python之算法
一.什么算法 算法:一个计算过程,解决问题的方法 二.时间复杂度 看代码: ...