我有以下几行与登录我的 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
可能会与“主”配置部分中的日志指令发生冲突。重复的日志行通常是由主配置部分中的一行和CustomLog
VirtualHost 部分中的第二行引起的。
在所有配置文件中搜索“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 使用不同的日志格式。