error_log por host virtual?
-
08-06-2019 - |
Pergunta
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_log
entre hosts virtuais.
Substituindo essa configuração no <Location>
do httpd.conf
parece não fazer nada.
Existe uma maneira de ter php separado error_logs
para cada host virtual?
Solução
Para definir o Apache (não o PHP) log, 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 "/" inicial, será considerado relativo.
Outras dicas
Se alguém vier procurar, deve ficar 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>
Isto é apenas para desenvolvimento, uma vez que display_error
está ativado.Você notará que o log de erros do Apache é separado do log de erros do PHP.As coisas boas estão em php.error.log
.
Dê uma olhada aqui para error_reporting
chave http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting
Eu normalmente apenas especifico isso em um .htaccess
arquivo ou o vhost.conf
no domínio em que estou trabalhando.Adicione isto a um destes arquivos:
php_admin_value error_log "/var/www/vhosts/example.com/error_log"
O comportamento padrão é que error_log() seja enviado 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-a sem configuração para usar o arquivo de log do Apache para o vhost atual.
Não defina error_log
para onde seu syslog
coisas vão, eg /var/log/apache2
, porque os erros serão interceptados por ErrorLog
.Em vez disso, crie um subdir
na tua pasta de projeto para registros e faça php_value
error_log "/path/to/project/logs"
.Isso vale para ambos .htaccess
arquivos e vhosts.Certifique-se também de colocar php_flag
log_errors
sobre
Você já tentou adicionar o php_value error_log '/path/to/php_error_log
à configuração do VirtualHost?
Sim, você pode tentar,
php_value error_log "/var/log/php_log"
em .htaccess
ou você pode fazer com que os usuários usem ini_set()
no início de seus scripts se quiserem fazer log.
Outra opção seria permitir que os scripts fossem padronizados para o php.ini
na pasta com o script, vá para a pasta raiz do usuário/host, depois para a raiz do servidor ou algo semelhante.Isso permitiria que os hosts adicionassem seus próprios php.ini
valores e seus próprios error_log
Localizações.
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
.
Meu Apache tinha algo assim no httpd.conf.Basta alterar as configurações de ErrorLog e CustomLog
<VirtualHost myvhost:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /opt/web
ServerName myvhost
ErrorLog logs/myvhost-error_log
CustomLog logs/myvhost-access_log common
</VirtualHost>
Você poderia 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.
Crie VirtualHost simples:
exemplo de nome de host: - thecontrolist.localhost
C:\Windows\System32\drivers\etc
127.0.0.1 thecontrolist.localhost
no arquivo hostsC:\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>
Não se esqueça de reiniciar seu apache.para mais verificar esse link