根据 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 截止值时会轮换,而且您还可以在文件名中使用伪时间戳来准确知道轮换发生的时间。