阻止 Apache 将重复的日志条目写入 access_log

阻止 Apache 将重复的日志条目写入 access_log

我有以下几行与登录我的 Apache vhost 文件有关的内容

SetEnvIf Request_URI "^/server-status$" dontlog
SetEnvIf Request_URI "^/haproxy-status$" dontlog
SetEnvIf Request_Method "OPTIONS" dontlog
CustomLog /var/log/apache2/access_log combined env=!dontlog
#ErrorLog  /var/log/apache2/error_log

#Remote logging -- handle by syslog
ErrorLog "|logger -p local3.info -t httperror"
CustomLog "|logger -p local3.info -t http" combined env=!dontlog

LogLevel warn

我真的不想把事情搞砸,以免无法正确获取日志,但我也不想看到每个条目都有重复的行。目前,如果我发出一个请求,我会看到一行是 Apache 的,然后是一行我假设是 haproxy 将其转发到我的应用程序的,类似于:

aa.bbb.ccc.dd - - [05/Oct/2010:02:29:51 +0000] "GET /the_url HTTP/1.1" 200 4 "-" "-"
eee.fff.gg.hh - - [05/Oct/2010:02:29:51 +0000] "GET /the_url HTTP/1.1" 200 4 "-" "-"
aa.bbb.ccc.dd - - [05/Oct/2010:02:31:03 +0000] "GET /another_url HTTP/1.1" 200 4 "-" "-"
eee.fff.gg.hh - - [05/Oct/2010:02:31:03 +0000] "GET /another_url HTTP/1.1" 200 4 "-" "-"

我应该怎么做才能防止这种情况发生?

答案1

记住VirtualHost 部分中的日志指令CustomLog /var/log/apache2/access_log可能会与“主”配置部分中的日志指令发生冲突。重复的日志行通常是由主配置部分中的一行和CustomLogVirtualHost 部分中的第二行引起的。

在所有配置文件中搜索“access_log”,查看是否有另一个部分负责重复的日志行。

如果您确实希望为您的 VirtualHost 设置单独的日志,那么请确保写入单独的日志文件:

在主 HTTP 配置中:

CustomLog /var/log/apache2/access_log

在本部分内:

CustomLog /var/log/apache2/www.thisvhost.org/access_log

为了保持简单并避免混淆,我通常会避免在 VirtualHost 部分中使用任何日志指令。您可以稍后根据其 VirtualHost 名称拆分日志。只需确保使用类似“虚拟主机的常见日志格式“(%v 或 %V)。

还有一种可能性。 syslog.conf 中的任何内容是否会写入 /var/log/apache2/access_log 文件? 这是值得怀疑的,因为 syslog 使用不同的日志格式。

答案2

这两行来自 apache,haproxy 使用不同的日志格式。

相关内容