前言

 测试人员反馈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 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以上,功能上差强人意,又比自己去写清理脚本的方案好些。鉴于网上关于这块功能的文章较少,希望这篇博文能对你有所帮助。

Tomcat8.5.24日志自动清理(maxDays)功能探究的更多相关文章

  1. IIS日志自动清理

    IIS在运行的过程中日志会不停地增长,若iis的网站被频繁的调用或不当的调用,则会产生很多日志.我在系统运维的时候曾出现过20G的系统盘,由于合作商开发的程序有问题,每几百微秒调用一次web服务,短期 ...

  2. Linux**系统实现log日志自动清理

    Linux系统实现log日志自动清理 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  3. log4j实现日志自动清理功能

    log4j不支持自动清理功能,但是log4j2版本支持,log4j2是log4j的升级版,比logback先进. log4j升级为log4j2(不需要改动代码)https://blog.csdn.ne ...

  4. Hadoop、Strom集群实现日志自动清理

    Hadoop+Storm集群,运行一段时间ZooKeeper等关键进程自动停止运行,经检测是系统磁盘不足 系统磁盘100%: 查找大文件后发现,空间均被ZooKeeper产生的log占用 find / ...

  5. Linux中添加计划任务与Elasticsearch日志自动清理

    一.简述 当日志发送到ELK之后,Elasticsearch随着日志的增加,占用磁盘量会越来越大.这时候,需要我们写角本定期DELETE日志.角本写法,也很简单,只是发送HTTP的DELETE方式到: ...

  6. python 日志logging设置按天进行保存,保存近7天,过期日志自动清理

    参考文章(写的很详细):https://www.cnblogs.com/xujunkai/p/12364619.html 前言: 跑接口自动化或者其他程序运行时,如果只能保存一份log文件,可能会存在 ...

  7. python日志按天分割,保存近一个月日志,日志自动清理

    python日志按天分割,保存近一个月日志 import os import logging import re from logging.handlers import TimedRotatingF ...

  8. 如何自动清理 KingbaseES SYS_LOG

    KingbaseES 初始化完成后,默认不会对 sys_log进行清理.如果需要对sys_log进行自动清理,需要设置相关参数. 与日志自动清理有关的参数(默认值)如下: log_filename | ...

  9. zookeeper3.4.6配置实现自动清理日志

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

随机推荐

  1. CCF系列之最大的矩形(201312-3)

    试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩 ...

  2. C# 内置 DateTime类详解

    C# 内置 DateTime类详解 摘抄自微软官方文档,用来方便自己查阅:网址:https://msdn.microsoft.com/zh-cn/library/system.datetime(v=v ...

  3. 序列化和Json

    实现了python与python程序之间内存的交互 常用场景: 1 把内存的数据写到磁盘 2 socket只能传字符串,二进制,通过序列化 ============================== ...

  4. File类实现文件夹和文件复制

    package com.jcy.copy; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFou ...

  5. java面向对象的三大特性——继承

    ul,ol { margin: 0; list-style: none; padding: 0 } a { text-decoration: none; color: inherit } * { ma ...

  6. python3 第三章 - 程序的基本结构

    1.编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -* ...

  7. html5中的新标签

    header <header> 标签定义文档的页眉(介绍信息). nva 根据W3C的定义规范:nav元素是一个可以用来作为页面导航的链接组: <nav><ul>& ...

  8. scala 小结(一)

    Scala 是什么?(What is scala?)   引用百度百科对于scala的定义: Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编 ...

  9. Git Batch命令(转)

    echo 和 @ 回显命令 @ #关闭单行回显 echo off #从下一行开始关闭回显 @echo off #从本行开始关闭回显.一般批处理第一行都是这个 echo on #从下一行开始打开回显 e ...

  10. 02_Linux图形界面及文件系统结构介绍

    一.根目录 /       : 它跟Windows的C.D.E.F不同,在Linux中,所有的文件系统(光驱.U盘.硬盘)都挂载到根目录的某一个文件夹下 bin   : 存放二进制可执行文件 sbin ...