如何使用logrotate压缩和清理日志,但不能旋转它们

我有一个Tomcat服务器,通过阀门创build访问日志( org.apache.catalina.valves.FastCommonAccessLogValve )。 此阀门负责旋转访问日志文件,但不会压缩或在一段时间后删除它们。

目前,我有一个使用find [...] -mtime +30 [...]压缩和删除日志的cron作业。 我宁愿使用logrotate,以便日志轮转处于所有日志的集中位置。 我不喜欢为Tomcat提供单独的解决scheme。

我试图读取logrotate文档,但我仍然有点失落。 我可以使用logrotate来压缩和清理日志文件吗? 我该怎么做?

或者绕过这个问题,有没有一个Tomcat的访问日志阀,将压缩和清理日志文件?

感谢您的帮助!

相当简单,我见过这样的作品。

在/etc/logrotate.d中创build一个名为tomcat的文件,其中包含以下内容:

 /var/log/tomcat/catalina.out { copytruncate daily rotate 7 compress missingok } 

每天运行, 压缩文件,并保持7天价值( 旋转7 )。 copytruncate意味着它将复制,然后截断原始文件,以便不需要重新启动tomcat。 缺less好的不会错误,如果它不存在。

access.log Valve可以通过添加rotate = false来更改为不旋转: –

 <Valve className="org.apache.catalina.valves.AccessLogValve ... ... rotatable=false/> 

修改后的TimP脚本 – 添加删除非常旧的文件,添加扫描旧的压缩文件。

 #!/bin/bash # # TPP 2013-02-21 # RJK 2014-08-14 # # Tomcat apps use a variety of loggers, mostly log4j. # These rotate, conflicting with logrotate, the unix log rotation system. # # Some files eg catalina.out # are rotated to a backup containing a date eg catalina.2013-01-06.log # which can then be compressed with bz2 to catalina.2013-01-06.log.bz2 # or removed if older than a given number of days(MTIME). # cd /var/log/tomcat6 # 2013-02-21 DATE=`date --rfc-3339=date` YEAR=`date +%Y` MILLENIUM=20 # 2014-08-14 MTIME=14 # 2014-08-14 #for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $YEAR) for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $MILLENIUM) do # 2014-08-14 if test `find $f -mtime +$MTIME` then echo "rm -f $f" rm -f $f else echo "bzip2 $f" bzip2 $f fi done # However others are active whilst containing a date # so we will find all and not compress the most recent for l in 'localhost*' 'opt-db*' 'opt*' 'host-manager*' 'manager*' do export previous= for f in $(find $l |grep -v bz2 |sort) do if [ "${previous}" != "" ] then echo "bzip2 ${previous}" bzip2 $previous fi export previous=$f done done # 2014-08-14 for f in $(find *bz2) do if test `find $f -mtime +$MTIME` then echo "rm -f $f" rm -f $f fi done exit 0 

我不想更改Tomcatconfiguration,所以创build了一个压缩旋转文件的脚本

 #!/斌/庆典
 #
 #TPP 2013-02-21
 #
 #Tomcat应用程序使用各种logging器,大多数是log4j。
 #这些旋转,与logrotate,unix日志旋转系统冲突。 
 #
 #一些文件,例如catalina.out
 #被旋转到包含date的备份,例如catalina.2013-01-06.log
 #然后可以用bz2压缩到catalina.2013-01-06.log.bz2
 #

 cd / var / log / tomcat6

 #2013-02-21
 DATE =`date --rfc-3339 = date`
 YEAR =`date+%Y`

 for f in $(find catalina * | grep -v bz2 | grep -v'$ DATE'| grep $ YEAR)
做
 回声“bzip2 $ f” 
  bzip2 $ f
 DONE

 #但是其他人在包含date的情况下是活跃的
 #所以我们会find所有,而不是最近的压缩
在'本地主机*''opt-db *''opt *''host-manager *''manager *'
做
 导出previous =
  for $ in $(find $ l | grep -v bz2 | sort)
 做
  如果[“$ {previous}”!=“”]
  然后
    回声“bzip2 $ {previous}” 
     bzip2 $之前
  科幻
  以前导出= $ f
  DONE
 DONE

退出0

这非常简单。 只要告诉logrotate你特别想旋转的文件。 nocreate告诉logrotate在移动旧文件后不要重新创build一个空文件(如果你正在将文件旋转到子文件夹中)。

 /var/log/tomcat/catalina.out.* { daily nocreate compress missingok } 

对于local_access_log.YYYY-MM-DD.txt压缩我看到这篇文章后写了这个脚本:

 #!/bin/bash # # If Tomcat uses server.xml config to rotate localhost_access_log, # the daily rotated logs will need compressing and old ones deleted to stop filling # the log partiton. Cannot use the system logrotate command as conficts with tomcat rotate # therefore run this script in a daily cronjob # # localhost_access_log.2015-09-03.txt # # Add this script in /etc/cron.daily/ owned by root # CATALINA_BASE=`ps aux | grep catalina.base | awk -F'catalina.base\=' '{print $2}' | awk '{print $1}'` if [ ! $CATALINA_BASE ] then if [ -r /var/lib/tomcat8 ] then CATALINA_BASE=/var/lib/tomcat8 else echo "Error: cannot find CATALINA_BASE" exit 1 fi fi cd ${CATALINA_BASE}/logs if [ $? -ne 0 ] then echo "Error, cannot cd to logs directory, quitting...." exit 1 fi # today's date (not to be gzipped) DATE=`date --rfc-3339=date` # number of days to keep MTIME=28 # Compress all previous days uncompressed logs for log in `ls localhost_access_log* | grep -v bz2 | grep -v $DATE` do bzip2 $log done # delete old logs find . -name "*.bz2" -mtime +$MTIME -exec rm {} \; exit 0 

简单的解决scheme提供 这还包括s3上传选项。

http://www.techiewiki.org/wiki/Tomcat_log_backup