5

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

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

4

4 回答 4

9

如果你不想使用findinside postrotate,不,你不能。

logrotateserver.log将Tomcat/JBoss 旋转的每个实例视为不同的文件,并且由于它们是唯一的,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 1并重compress命名和压缩,例如,server.log.20131201server.log.20131201.0.bz2. 0时间戳和扩展名之间的.bz2来自start 0.
  • size 0确保文件总是被重命名和压缩。
  • lastaction块会删除超过 180 天的旋转文件。
于 2015-03-09T21:51:06.253 回答
0

logrotate 可以管理您的日志轮换它们并最终保留有限数量的轮换日志。但是 AFAIK 它只能对它直接管理的日志执行此操作。如果您的日志已经被其他代理(即 Tomcat 本身)轮换,logrotate 将无能为力,因为不知道其他代理执行的轮换。

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

于 2014-12-04T11:15:58.253 回答
0

你可以把脚本放到/etc/cron.daily。例如:

猫 /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 错误

于 2015-11-19T12:54:28.667 回答
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 {} \;
于 2020-11-30T10:20:55.807 回答