error_log por host virtual?

113

Em um servidor Linux executando Apache e PHP 5, temos vários hosts virtuais com arquivos de log separados. Não conseguimos separar o php error_logentre hosts virtuais.

Substituir essa configuração no <Location>de httpd.confnão parece fazer nada.

Existe uma maneira de ter php separado error_logspara cada Host Virtual?

Michael Stum
fonte

Respostas:

81

Para definir o log do Apache ( não o PHP ), a maneira mais fácil de fazer isso seria:

<VirtualHost IP:Port>
   # Stuff,
   # More Stuff,
   ErrorLog /path/where/you/want/the/error.log
</VirtualHost>

Se não houver um "/" inicial, será considerado relativo.

Página de registro de erros do Apache

helloandre
fonte
7
Esse é o log de erros do Apache, que é separado do log de erros do PHP (veja outros comentários)
thelem
em relação a quê? o diretório httpd.confonde está escrito, ou?
mb21
141

Se alguém vier procurando, deve ser assim:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/domains/example.com/html
    ErrorLog /var/www/domains/example.com/apache.error.log
    CustomLog /var/www/domains/example.com/apache.access.log common
    php_flag log_errors on
    php_flag display_errors on
    php_value error_reporting 2147483647
    php_value error_log /var/www/domains/example.com/php.error.log
</VirtualHost>

Isso é apenas para desenvolvimento, pois display_errorestá ativado. Você notará que o log de erros do Apache é separado do log de erros do PHP. A coisa boa é php.error.log.

Dê uma olhada aqui para a error_reportingchave http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

Embreagem
fonte
8
Dependendo da sua configuração, você pode precisar criar manualmente o arquivo de log e definir o proprietário / grupo para o mesmo usuário / grupo que o Apache está usando. O Apache não avisará você se não puder gravar no arquivo de log.
Ian Dunn
Observe que o valor de "error_reporting" muda com as novas versões do PHP conforme adicionam mais níveis de erro. E_ALL = "30719" agora.
ReactiveRaven
2
Uma vez que os valores de "error_reporting" continuam mudando e você não pode usar constantes PHP como "E_ALL" e "E_STRICT" fora do php, é assim que você garante que terá TODOS os erros registrados: php_value error_reporting 2147483647
Buttle Butkus
Por que você quer seu log em seu espaço de domínio público?
AlxVallejo
1
O arquivo de log não seria público. / html / é o espaço público.
Embreagem de
13

Eu normalmente apenas especificar isso em um .htaccessarquivo ou o vhost.confsobre o domínio que estou trabalhando. Adicione a um destes arquivos:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"
Kevin
fonte
1
Alguém pode comentar a diferença entre php_admin_valuee php_value?
Nick M
1
Isso explica a diferença: mattiasgeniar.be/2012/02/18/…
Jeremy
9

O comportamento padrão para error_log () é a saída para o log de erros do Apache. Se isso não estiver acontecendo, verifique as configurações do php.ini para a diretiva error_log. Deixe-o sem definição para usar o arquivo de log do Apache para o vhost atual.

Esteira
fonte
Eu vou verificar. Eu só me pergunto se é possível ainda ter o log de erros do apache e do php separados quando queremos dar aos desenvolvedores a chance de depurar seu código sem fornecer o log de erros do apache que pode conter outros dados confidenciais.
Michael Stum
7

Não defina error_logpara onde seu syslogmaterial vai eg /var/log/apache2, porque os erros serão interceptados por ErrorLog. Em vez disso, crie um subdirem sua pasta de projeto para logs e faça php_value error_log "/path/to/project/logs". Isso vale para .htaccess arquivos e vhosts . Também certifique-se de colocar php_flag log_errorsem

rkulla
fonte
Interessante. Esse comportamento depende do caminho do arquivo error_log?
demonkoryu
6

Você já tentou adicionar o php_value error_log '/path/to/php_error_logà sua configuração do VirtualHost?

hoyhoy
fonte
6

Sim, você pode tentar,

php_value error_log "/var/log/php_log" 

em .htaccessou você pode fazer com que os usuários usem ini_set()no início de seus scripts, se eles quiserem fazer login.

Outra opção seria habilitar os scripts a serem padronizados php.inina pasta com o script, ir para a pasta raiz do usuário / host e, em seguida, para a raiz do servidor ou algo semelhante. Isso permitiria que os hosts adicionassem seus próprios php.inivalores e suas próprias error_loglocalizações.

James Hartig
fonte
6
php_value error_log "/var/log/httpd/vhost_php_error_log"

Funciona para mim, mas preciso alterar a permissão do arquivo de log.

ou o Apache irá gravar o log no seu error_log.

sangjin
fonte
5

Meu Apache tinha algo parecido com isso em httpd.conf. Basta alterar as configurações ErrorLog e CustomLog

<VirtualHost myvhost:80>
    ServerAdmin [email protected]
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>
ejunker
fonte
1
Estamos falando sobre o log do PHP, não o log do Apache aqui.
demonkoryu
4

Podes tentar:

    <VirtualHost myvhost:80>
       php_value error_log "/var/log/httpd/vhost_php_error_log"
    </Virtual Host>

Mas não tenho certeza se vai funcionar. Tentei em meus sites sem sucesso.

Robinho
fonte
2

Crie VirtualHost simples:

exemplo de nome de host: - thecontrolist.localhost

  1. C: \ Windows \ System32 \ drivers \ etc

    127.0.0.1 thecontrolist.localhost no arquivo hosts

  2. C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf

    <VirtualHost *>
      ServerName thecontrolist.localhost
      ServerAlias thecontrolist.localhost
      DocumentRoot "/xampp/htdocs/thecontrolist"
      <Directory "/xampp/htdocs/thecontrolist">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
      </Directory>
    </VirtualHost>
    
  3. Não se esqueça de reiniciar seu apache. para mais verifique este link

Parveen Chauhan
fonte