Apache single ErrorLog, muitos VirtualHosts

2

Eu tenho um servidor web com muitos (milhares) VirtualHosts. Com a configuração atual, o Apache preenche 2 arquivos para cada VirtualHost: error.log + access.log. O Apache trabalha no modo prefork e para evitar muitos descritores de arquivos abertos ao mesmo tempo, eu gostaria de ter um único access.log e error.log para todos os VirtualHosts.

Uma tarefa CRON irá dividir arquivos para cada VirtualHost uma vez por dia, então eu preciso do nome VirtualHost em cada linha dos arquivos * .log. Isso é muito fácil para 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 me dá o nome do VirtualHost e isso é suficiente para dividir arquivos.

Mas não consigo encontrar a configuração equivalente para o ErrorLog.

Perguntas:

  1. na sua opinião, é relevante para tente identificar cada um a origem de cada linha error.log
  2. você conhece uma solução?
por plegall 22.10.2010 / 11:27

2 respostas

2
A

ErrorLog directiva em Apache não pode ser personalizada.

Se sua intenção é reduzir FDs, com um único log de acesso, milhares de virtualhosts, você os reduzirá (FDs) em pelo menos n * virtualhosts.

Minha sugestão é manter o log de erros para cada VH e, como você diz, dividir seu log de acesso como você já está fazendo.

Se for necessário configurar um único log de erros, cada entrada no error_log tem uma entrada correspondente em access_log, então com alguma magia perl você poderia fazer o trabalho, mas eu acho que não vale a pena o esforço, já que levaria algum tempo para processar e é muito sujeito a erros.

    
por 22.10.2010 / 11:52
0

Você pode usar uma diretiva ErrorLog com um canal para uma campanha de uma linha script - ou seja,

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

... para o script:

#!/bin/bash
read INCOMING_LOG && echo ${2}" - "${INCOMING_LOG} >> $1
    
por 22.10.2010 / 12:32