On one Linux Server running Apache and PHP 5, we have multiple Virtual Hosts with separate log files. We cannot seem to separate the php error_log
between virtual hosts.
Overriding this setting in the <Location>
of the httpd.conf
does not seem to do anything.
Is there a way to have separate php error_logs
for each Virtual Host?
This question is related to
linux
apache
virtualhost
If somebody comes looking it should look like this:
<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>
This is for development only since display_error
is turned on. You will notice that the Apache error log is separate from the PHP error log. The good stuff is in php.error.log
.
Take a look here for the error_reporting
key http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting
Don't set error_log
to where your syslog
stuff goes, eg /var/log/apache2
, because they errors will get intercepted by ErrorLog
. Instead, create a subdir
in your project folder for logs and do php_value
error_log "/path/to/project/logs"
. This goes for both .htaccess
files and vhosts. Also make sure you put php_flag
log_errors
on
My Apache had something like this in httpd.conf. Just change the ErrorLog and CustomLog settings
<VirtualHost myvhost:80>
ServerAdmin [email protected]
DocumentRoot /opt/web
ServerName myvhost
ErrorLog logs/myvhost-error_log
CustomLog logs/myvhost-access_log common
</VirtualHost>
php_value error_log "/var/log/httpd/vhost_php_error_log"
It works for me, but I have to change the permission of the log file.
or Apache will write the log to the its error_log
.
The default behaviour for error_log() is to output to the Apache error log. If this isn't happening check your php.ini settings for the error_log directive. Leave it unset to use the Apache log file for the current vhost.
Have you tried adding the php_value error_log '/path/to/php_error_log
to your VirtualHost configuration?
I usually just specify this in an .htaccess
file or the vhost.conf
on the domain I'm working on. Add this to one of these files:
php_admin_value error_log "/var/www/vhosts/example.com/error_log"
Yes, you can try,
php_value error_log "/var/log/php_log"
in .htaccess
or you can have users use ini_set()
in the beginning of their scripts if they want to have logging.
Another option would be to enable scripts to default to the php.ini
in the folder with the script, then go to the user/host's root folder, then to the server's root, or something similar. This would allow hosts to add their own php.ini
values and their own error_log
locations.
You can try:
<VirtualHost myvhost:80>
php_value error_log "/var/log/httpd/vhost_php_error_log"
</Virtual Host>
But I'm not sure if it is going to work. I tried on my sites with no success.
Create Simple VirtualHost:
example hostname:- thecontrolist.localhost
C:\Windows\System32\drivers\etc
127.0.0.1 thecontrolist.localhost
in hosts file
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>
Don't Forget to restart Your apache. for more check this link
Source: Stackoverflow.com