如何限制 Apache 访问日志的大小,并限制它保留的归档日志的数量?

Posted

技术标签:

【中文标题】如何限制 Apache 访问日志的大小,并限制它保留的归档日志的数量?【英文标题】:How can I limit the size of Apache's access_log, and limit the number of archived logs it keeps? 【发布时间】:2012-07-11 09:44:51 【问题描述】:

Apache 的 access_log 文件每隔几天就会转出大约 1GB 的存档副本。控制这个的设置在哪里?我希望能够控制它保留的最大大小和存档日志的数量。这是 apache 配置的一部分,还是我需要编写 cron 作业(等)来处理这个?我正在运行预分叉的 httpd。

【问题讨论】:

您的服务器使用什么操作系统? 【参考方案1】:

惯用的方法是从 cronjob 运行 logrotate,它可以切片、切块、压缩、重命名、保留最后一个 n 以及大多数其他人可能想要的东西。 (我认为现在大多数发行版都默认安装它。)

【讨论】:

是什么导致它现在转出为存档副本?我没有设置任何 cron 作业。我偶尔会重新启动 httpd。这样做可以吗?【参考方案2】:

在大多数 Linux 发行版上,系统设置为每天运行 logrotate。您不会在 root 或任何特定用户的 crontab 中看到它。

很容易改变它处理日志文件的方式。在我的 Ubuntu 服务器上,/etc/logrotate.conf 文件具有如下设置:

# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

[等]

而且,您可以查看目录/etc/logrotate.d/ 以查看特定目录和应用程序的设置。

【讨论】:

我应该寻找什么文件来编辑服务器上的虚拟域的日志设置?这是logrotate.d/apache2吗? 将在 /etc/apache2/sites-enabled 中【参考方案3】:

我会使用 rotatelogs,一个位于 apache bin 目录中的工具。

有关更多信息和示例,请参阅http://httpd.apache.org/docs/current/programs/rotatelogs.html。它具有存在于我的 HP-UX 系统上的优势。

或者如前所述,您可以使用大多数发行版附带的 logrotate 工具。

【讨论】:

【参考方案4】:

我需要控制每个虚拟主机的日志文件大小并最终得到它:

ErrorLog "|/usr/bin/rotatelogs /var/www/my-virtual-host.com/logs/error_log_%Y.%m.%d.log 10M"

使用which rotatelogs 查找可执行文件的路径。我的情况是 /usr/bin/rotatelogs 而不是 |bin/rotatelogs,因为它在文档中有所描述。

http://httpd.apache.org/docs/2.0/programs/rotatelogs.html

显然rotatelogs 也可以应用于access_log(即CustomLog)。

【讨论】:

【参考方案5】:

other_vhosts_access.log 日志增长太快,我注释掉了 /etc/apache2/conf-available/other-vhosts-access-log.conf 中的 CustomLog 行,它对我有用。

【讨论】:

以上是关于如何限制 Apache 访问日志的大小,并限制它保留的归档日志的数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中限制日志大小

修改 apache 上传文件大小限制

限制对 Apache 2.4 虚拟主机 (WAMP) 的访问

如何在ansible中指定docker的log-opt来限制容器的日志大小?

Apache HTTP Server:如何将对目录列表的访问限制在某些 IP 范围内?

如何调整nginx和apache服务器的header限制的大小