Apache 使用 logrotate 将多个域的日志记录到一个文件中

Apache 使用 logrotate 将多个域的日志记录到一个文件中

我想要一个解决方案来解决这个问题,我在 Apache 服务器上有 100 多个域。我不想为每个域单独创建一个日志文件,我希望它们共享一个日志文件。如果我不需要轮换它们,这很容易。例如,我可以使用

CustomLog "/var/log/apache2/access_log" "%h %v %l %u %t \"%r\" %>s %b"
ErrorLog "/var/log/apache2/error_log"

这很好用,但我用了这个,发现我的日志文件是6GB。因此我希望使用 Apache 程序 rotatelogs 来轮换日志文件。因此我尝试在我的某个虚拟主机上添加一些轮换。

CustomLog '|/usr/sbin/rotatelogs "/var/log/apache2/access_log" 604800 0' "%h %v %l %u %t \"%r\" %>s %b"

问题是它在 access_log 后面添加了一些数字,因此其他域不会写入与轮换文件相同的文件。有没有办法让所有域写入同一个文件并轮换文件?如果我将日志轮换放入所有虚拟主机,它会使用同一个文件还是每个域都会覆盖该文件?我应该如何处理 6GB 的 access_log?

答案1

最终的答案是...

使用全局日志记录而不是每个虚拟主机日志记录。我注释掉了虚拟主机中的所有自定义日志和错误日志,然后在 httpd.conf 中添加了

CustomLog '|/usr/sbin/rotatelogs "/var/log/apache2/access_log.%Y-%m-%d" 604800 0' "%h %v %l %u %t \"%r\" %>s %b"

ErrorLog '|/usr/sbin/rotatelogs "/var/log/apache2/error_log.%Y-%m-%d" 604800 0'

这招奏效了

相关内容