tomcat中的项目一般都会配置日志打印,方便调试与bug追踪定位,但是如果项目日志不定期清理,可能会导致日志文件越来越大,最后甚至撑爆硬盘,因此实现tomcat日志自动清理还是很有必要的,实现方案也很多,有些方案就不细说了,可以提供些思路,根据自己的需求可以自行选择使用。
一、配置滚动日志实现
一般日志都是使用log4j或log4j2来实现,现在很多基本都在逐步过渡到1og4j2,springboot默认集成logback,但性能都不及log4j2,有兴趣的可以看下这篇文章:
[neilian ids=3252]
针对log4j,我们一般常用的日志配置是DailyRollingFileAppender和RollingFileAppender,DailyRollingFileAppender可以对日志按日期指定monthly(每月)、 weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小时)和minutely(每分钟)六个频度来存储,便于查找,但缺点就是不能自动清理,随着时间的推移越积累越多。
RollingFileAppender可以配置MaxFileSize和MaxBackupIndex这两个属性来实现自动清理的目的,比如配置如下:
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.Threshold=DEBUG
log4j.appender.R.File=test.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n
log4j.appender.R.MaxFileSize=20MB
log4j.appender.R.MaxBackupIndex=10
RollingFileAppender使用MaxFileSize设置一个日志文件的最大大小,当产生多个日志时,会在日志名称后面加上”.1″、”.2″、……这样的后缀,我们可以看到RollingFileAppender有个属性MaxBackupIndex,这个属性通过限制日志文件名后缀”.n”中的n大小来限制日志数量,比如上面MaxBackupIndex=10,其实最大日志数量为11。这样就实现了日志滚动覆盖,不会导致无限占用空间,存在空间上限。

程序员导航
优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站
二、shell脚本实现
如果偏要使用DailyRollingFileAppender实现日志定时清理,有两种方案,第一种就是在程序中写个定时任务去定时删除过期的日志文件,这个代码量有点多就不贴出来了,另外一种是使用Liunx系统中的shell脚本定时去实现删除指定目录的过期日志文件。
比如可以新建一个名为auto-clean-10day-ago-log.sh脚本,注意脚本要设置为unix格式,内容如下:
#! /bin/bash
#你的tomcat目录路径
tomcat_url=/home/server/tomcat/apache-tomcat-8.5.71
#递归删除logs目录下以.log结尾的10天之前的所有日志文件
find ${tomcat_url}/logs/ -mtime +10 -name "*.log" -exec rm -rf {} \;
然后上传该脚本,并赋予执行权限,然后将其加入到crontab中定时执行
# 赋予脚本可执行权限 chmod +x /home/server/scripts/auto-clean-10day-ago-log.sh #编辑定时任务 crontab -e #加上如下内容(实现每天凌晨1点执行)保存 0 1 * * * /home/server/scripts/auto-clean-10day-log.sh #重启生效 /etc/init.d/cron restart
三、使用log4j2
log4j不支持定时删除过期日志,但log4j2支持,可以通过DefaultRolloverStrategy配置实现,具体案例如下:
总而言之,实现tomcat日志自动定时清理有很多种方式,选择一种适合自己的最好!

AI 工具导航
优网导航旗下AI工具导航,精选全球千款优质 AI 工具集



