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

我有以下关于我的apache虚拟主机文件中的login行

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 "-" "-" 

我该怎么做才能防止呢?

请记住, VirtualHost部分中的日志指令可能与“主”configuration部分中的日志指令冲突。 重复的日志行通常是由主configuration部分中的CustomLog /var/log/apache2/access_log和VirtualHost部分中的第二个CustomLog造成的。

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

如果你真的想为你的虚拟主机有单独的日志,那么一定要写入单独的日志文件:

在主HTTPconfiguration中:

 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文件的内容吗? 这是令人怀疑的,因为系统日志使用不同的日志格式。

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