为什么 apache 的 rotatelogs 生成的文件小于指定的最大大小?

为什么 apache 的 rotatelogs 生成的文件小于指定的最大大小?

我使用以下旋转日志来自 Apache 的命令:

/usr/sbin/rotatelogs /var/log/somelogfile 1GB

如果我向它发送 1GB 的内容(用于测试),它会生成以下文件:

somelogfile.1706304578  285'867'200  10:29:38
somelogfile.1706304579  375'848'960  10:29:39
somelogfile.1706304580  437'027'357  10:29:40

所有文件大小的总和确实是 1GB,但为什么要旋转 3 次?我预计会创建一个 1GB 的文件。

另外:它生成的文件的大小和数量似乎是随机的(例如:我最终可能会得到 4 个文件,有时是 2 个......)


有一个冗长将重定向一些输出的模式STDERR

rotatelogs -v

它应该提供有关日志轮换原因的信息。但是我不确定如何检索发送到的内容STDERR。我尝试了这个命令:

rotatelogs /var/log/somelogfile 1GB -v 2> /tmp/error.txt

但没有成功(rotatelogs 不会启动)

答案1

我发现了错误之处:

/usr/sbin/rotatelogs /var/log/somelogfile 1GB

应该

/usr/sbin/rotatelogs /var/log/somelogfile 1G

感谢布赖恩感谢他对 STDERR 的评论。


以下是我的发现:

启用详细模式

LogFile "|/usr/sbin/rotatelogs -v /var/log/somelogfile ..."

然后检查日志文件:

journalctl -u httpd.service --since "5min ago"

就我而言,我得到了这个:

Rotation size interval:                 1
...
File rotation needed, reason: Maximum size reached 
File rotation needed, reason: Maximum size reached
File rotation needed, reason: Maximum size reached (hundred of times)
...

理论上,它应该创建 1'073'741'824 个 1 字节的文件,但实际上只创建了 3-4 个几百 MB 的文件。

相关内容