• Tomcat 自动清理日志


    前言

    测试人员反馈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,在官网上下载了tomcat32-bit/64-bit Windows Service Installer,重新注册服务后,发现自动清理功能生效。

    1.4、需要注意的是,这个清理功能按照配置只对catalina,localhost,manager,host-manager 这4类日志文件有效。对于stderr,stdout这两类日志可以通过Tomcat服务管理工具进行设置,过程很简单,将Logging页签下的Redirect StdoutRedirect 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以上,功能上差强人意,又比自己去写清理脚本的方案好些。鉴于网上关于这块功能的文章较少,希望这篇博文能对你有所帮助。

  • 相关阅读:
    普遍前端开发的接口交互和前端调用智能合约
    对比Vue2和Vue3的自定义指令
    【QT基础入门】QT中的容器类:QList
    【Redis学习笔记】第十四章 Redis企业级解决方案与性能监控
    【Python第三方包】爬虫前言(request包)
    深度学习部署
    【教学类-20-01】20221203《世界杯16强国旗》(大班)
    【机器学习】梯度下降法与牛顿法【Ⅲ】拟牛顿法
    【LeetCode】二叉搜索树相关题解汇总
    轻量级模型设计与部署总结
  • 原文地址:https://blog.csdn.net/m0_67392126/article/details/126516795