Logrotate:“日志不需要旋转”为什么?

Logrotate:“日志不需要旋转”为什么?

我有以下新的 logrotate 配置:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

当我运行时logrotate -d nexus,我得到以下信息:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

我的 /var/log/nexus/ 文件夹包含以下内容:

nexus.log
oldlogs.tar.gz

为什么 LogRotate 不旋转 nexus.log 文件?我所期望的是 nexus.log 文件将被截断并创建一个新文件,例如 nexus.log-201106241000。

答案1

最有可能的是,日志文件的创建时间不到一天和/或在最后一天内已轮换,并且 logrotate 会记住历史记录。

如果你添加它,-f如果你确实想要的话,它会强制旋转(尽管不能 100% 确定它如何与 交互-d)。

您可以查看历史记录,位置取决于您的发行版,但可能是/var/lib/logrotate/status。该文件显示日志上次轮换的时间。

答案2

第一次使用新的日志配置运行 logrotate 时,它​​不知道上次日志轮转发生的​​时间,因此它只是写入一个状态行,/var/lib/logrotate/status以表明它今天运行。

当它在第二天运行时,它会发现日志已经存在一天了,并按预期轮换它。如果您不想等待,请编辑 logrotate 的状态文件并将日志的状态日期恢复到前一天。

当您手动运行 logrotate 时,它​​将按预期工作

答案3

dateext有时,即使您手动运行 logrotate,如果您在同一天执行此操作并且默认值不包含秒(例如-%Y%m%d),这也将不起作用。即使您修改 logrotate 的状态文件或使用 size 指令(例如size 200M)也不会。至少在 CentOS 6 上,logrotate 将无法轮换您的日志文件,因为它已经存在。

要解决此问题,您需要使用,dateformat代替dateext, 其值如下:%Y%m%d%s

请参阅man logrotate获取更多信息。

答案4

请注意,通过运行

logrotate -vdf /etc/logrotate.conf

尽管仅模拟该事件,但该事件将被记录/var/lib/logrotate.status ,后续 logrotate 运行将回复上述内容

log does not need rotating

相关内容