Apache “rotatelogs” 不适用于给定的文件大小

Apache “rotatelogs” 不适用于给定的文件大小

根据 Apache 文档rotatelogs,我在 httpd.conf 中实现了如下日志文件格式:

<IfModule log_config_module>
    CustomLog "|bin/rotatelogs.exe logs/access_log-%Y.log 10M" common
<IfModule log_config_module>

它创建了一个文件access_log.log-2015并记录日志,但在达到 10MB 后就不会旋转文件,文件大小现在是 20MB。

这里我遗漏了什么吗?我在 Windows 上使用 XAMPP。

答案1

Rotatelogs 文档称日志文件模板应该足够具体,以便在达到大小限制时给出新名称。但您的模板却不是这样。尝试更改为包括月份和日期。

文档暗示,当达到限制时,文件将被截断并重新打开。这不是您看到的情况,但可能是由于平台差异造成的。

答案2

您的设置是这样的:

<IfModule log_config_module>
    CustomLog "|bin/rotatelogs.exe logs/access_log-%Y.log 10M" common
<IfModule log_config_module>

因此,按照这种设置方式,无论大小设置access_log.log-2015如何,都一定会在 2016 年 1 月 1 日轮换access_log.log-2015。如果您想要每日轮换,则需要设置除年份之外的其他内容,例如月份和日期,如下所示:

<IfModule log_config_module>
    CustomLog "|bin/rotatelogs.exe logs/access_log-%Y-%m-%d.log 10M" common
<IfModule log_config_module>

或者甚至除了月份和日期之外,还可以显示小时、分钟和秒:

<IfModule log_config_module>
    CustomLog "|bin/rotatelogs.exe logs/access_log-%Y-%m-%d-%H_%M_%S.log 10M" common
<IfModule log_config_module>

这个想法很简单:如果日志文件的大小达到 10MB,而文件名只有一年,那么每次“轮换”都会保留一年的命名方案。您看不到轮换,因为它只是将其附加到access_log-2015.log

通过添加更多特殊性,您可以确保日志不仅在达到 10MB 截止值时会轮换,而且您还可以在文件名中使用伪时间戳来准确知道轮换发生的时间。

相关内容