logrotate:删除超过n天的tomcat / jboss日志

时间:2014-01-09 08:30:30

标签: linux logging logrotate log-rotation

我还没有找到清除旧的tomcat或jboss日志或任何其他带时间戳的日志的解决方案:catalog.log。 /server.log。。基本上这些日志由jboss旋转为: server.log,server.log.20131201,server.log.20131203等。

有没有办法可以使用logrotate删除超过n天的日志?我不想在postrotate里面使用find或调整jboss / tomcat日志属性。我只想知道logrotate是否可以实现这一点。我知道这不是很有效率,但我遇到了一个问题,我需要回答这个问题。

4 个答案:

答案 0 :(得分:7)

如果您不想在find内使用postrotate,请不要,

logrotate将Tomcat / JBoss轮换的每个server.log实例视为不同的文件,由于它们是唯一的,logrotate只会将它们旋转一次。 maxage - 删除超过n天的轮换日志的指令 - 仅在要轮换日志文件时进行检查,以便maxage仅执行一次并且无法保留跟踪文件的年龄。

但是,如果您改变主意使用findlogrotate可以帮助您简化Tomcat和JBoss创建的日志文件的管理。我使用它来压缩和删除旧文件,配置文件如下:

/path/to/logs/server.log.????-??-?? {
    compress
    compresscmd /usr/bin/bzip2
    nocreate
    nodateext
    ifempty
    missingok
    rotate 1
    size 0
    start 0
    lastaction
        # Remove rotated files older than 180 days
        find /path/to/logs -name 'server.log.????-??-??.0.bz2' -mtime +180 -exec rm {} \;
    endscript
}

其中:

  • rotate 1compressserver.log.20131201重命名并压缩为server.log.20131201.0.bz2。时间戳和0扩展名之间的.bz2来自start 0
  • size 0确保始终重命名和压缩文件。
  • lastaction块会删除超过180天的轮换文件。

答案 1 :(得分:0)

logrotate可以管理您的日志旋转它们并最终保留有限数量的旋转日志。但是AFAIK它只能用于直接管理的日志。如果你的日志已被某些其他代理(即Tomcat本身)旋转,则logrotate无法执行任何操作,只是因为对其他内容执行的旋转一无所知。

所以答案是否定的,你不能使用logrotate删除不是自己管理的日志(我认为甚至不打算做那样的事情)。

答案 2 :(得分:0)

您可以将脚本放到/etc/cron.daily。例如:

cat /etc/cron.daily/tomcat-rotate-logs

#!/bin/sh

# erasing tomcat logs older then 7 days

for x in $(find /var/log/tomcat/ -type f -mtime +7);
do
       rm "$x";
       logger -t TOMCAT-ROTATE-LOGS "Erasing $x [done]"; 
done

或创建一个logrotate配置。例如: cat /etc/logrotate.d/tomcat

/var/log/tomcat/*.log {
        su tomcat tomcat
        copytruncate  
        daily  
        rotate 6  
        compress  
        missingok
}

" su tomcat tomcat" - 代表避免错误权限上的logrotate错误

答案 3 :(得分:0)

不确定@jaume的配置是否与当前正在写入的日志文件一起正确运行。特别是带有“ nocreate”选项。希望看到他对此的评论。 对于我来说,拒绝logrotate并在cron中仅使用bash脚本会更容易。 像这样:

#!/bin/bash
/usr/bin/find /path/to/logs/ -name 'server.log.????-??-??.gz' -mtime +7 -delete
/usr/bin/find /path/to/logs/ -name 'server.log.????-??-??' -mtime +1 -exec gzip -q {} \;