No Apache2 / mod_perl2, a saída do stderr não vai para o arquivo de log nomeado pelo ErrorLog

3

Eu gosto de manter arquivos de log separados do Apache2 para cada um dos meus hosts virtuais nomeados, assim:

<VirtualHost *:80>
  ServerName myhost.example.com
  ErrorLog /var/log/apache2/myhost-error.log
</VirtualHost *:80>

O arquivo nomeado reúne corretamente mensagens de erro geradas pelo próprio Apache2, como 404s:

[Thu Jul 18 12:07:45 2013] [error] [client 10.0.0.141] File does not exist: /home/mike/myhost/htdocs/favicon.ico

Mas quando myhost executa scripts mod_perl que emitem suas próprias mensagens de registro (usando print para STDERR, por exemplo), essas mensagens ainda aparecem no log de erros global do Apache2, /var/log/apache2/error.log.

Isto está usando o Apache 2.2.16 no Debian GNU / Linux 6.0, mas eu também vejo a mesma coisa no Ubuntu 12.04.2 LTS e no MacOS 10.5 - eu acho que é o comportamento padrão do Apache2.

Eu quero que o logging dos meus scripts mod_perl apareça no log de erros específico do site, assim como os 404s e outros erros no nível do Apache. Como posso fazer isso acontecer?

    
por Mike Taylor 23.07.2013 / 15:18

1 resposta

0

Isso é parcialmente resolvido sobrescrevendo warn dos seus scripts. STDERR ainda vai para o log de erros principal do Apache.

De documentos do Modperl :

  1. First, we need to use mod_perl's logging function, instead of CORE::warn

Either replace warn with Apache2::ServerRec::warn:

use Apache2::Log ();
Apache2::ServerRec::warn("the code is smoking");

or import it into your code:

use Apache2::ServerRec qw(warn); # override warn locally
warn "the code is smoking";
    
por 28.06.2018 / 11:35