Apache单一ErrorLog,许多VirtualHosts

我有一个networking服务器与许多(数千)VirtualHosts。 使用当前configuration,Apache为每个VirtualHost填充2个文件:error.log + access.log。 Apache工作在prefork模式,为了避免同时打开多个文件描述符,我希望所有的VirtualHost都有一个access.log和error.log。

CRON任务将每天为每个VirtualHost分割文件,所以我需要* .log文件的每行上的VirtualHost名称。 access.log非常简单:

LogFormat "%V:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined CustomLog /var/log/apache2/vhosts_access.log vhost_combined 

%V给我的VirtualHost名称,这足以分裂文件。

但是我找不到ErrorLog的等效设置。

问题:

  1. 在你看来,它是相关的尝试确定每个error.log行的来源
  2. 你知道一个解决scheme吗?

Apache ErrorLog指令无法自定义。

如果你的目的是减lessFD,使用一个单一的访问日志,数千个虚拟主机,你将减less它们(FD)至lessn *虚拟主机。

我的build议是保持每个VH的错误日志,就像你说的那样,分割你的访问日志,因为你已经在做它了。

如果必须configuration一个错误日志,那么error_log中的每个条目在access_log中都有一个对应的条目,所以用一些perl的魔法你可以完成工作,但是我认为这是不值得的,因为它需要一些时间来处理,这是非常容易出错的。

你可以使用一个ErrorLog指令和一个pipe道的单行bash脚本 – 即

 ErrorLog "| /script_location 'log destination' 'virtualhost.com'" 

…脚本:

 #!/bin/bash read INCOMING_LOG && echo ${2}" - "${INCOMING_LOG} >> $1