每个虚拟主机的error_log?


113

在运行Apache和PHP 5的一台Linux服务器上,我们有多个虚拟主机和单独的日志文件。我们似乎无法将error_log虚拟主机之间的php分开。

覆盖在此设置<Location>httpd.conf似乎没有做任何事情。

有没有办法error_logs为每个虚拟主机使用单独的php ?

Answers:


81

要设置Apache而不是PHP)日志,最简单的方法是:

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

如果没有前导“ /”,则假定是相对的。

Apache错误日志页面


7
那是apache错误日志,与PHP错误日志分开(请参阅其他评论)
thelem 2010年

相对于什么?httpd.conf写入的目录,还是?
mb21 2013年

141

如果有人来找,它应该看起来像这样:

<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>

display_error在打开时才用于开发。您会注意到Apache错误日志与PHP错误日志是分开的。好东西进来了php.error.log

在此处查看error_reporting密钥http://www.php.net/manual/zh-CN/errorfunc.configuration.php#ini.error-reporting


8
根据您的配置,您可能需要手动创建日志文件,并将所有者/组设置为与Apache使用相同的用户/组。如果无法写入日志文件,Apache不会警告您。
伊恩·邓恩

请注意,随着新版本的PHP添加更多错误级别,“ error_reporting”值会发生变化。E_ALL =“ 30719”现在。
ReactiveRaven 2012年

2
由于“ error_reporting”值不断变化,并且由于无法在php之外使用PHP常量(例如“ E_ALL”和“ E_STRICT”),因此,您可以确保始终记录所有错误:php_value error_reporting 2147483647
Buttle Butkus

您为什么要在公共域空间登录?
AlxVallejo 2014年

1
日志文件不会公开。/ html /是公共空间。
离合器2014年

13

我通常只在.htaccess文件中正在vhost.conf使用的域中指定此名称。将此添加到以下文件之一:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"

1
谁能评论php_admin_value和之间的区别php_value
尼克M


9

error_log()的默认行为是输出到Apache错误日志。如果这没有发生,请检查您的php.ini设置中的error_log指令。将其保留为未设置状态,以将Apache日志文件用于当前vhost。


我会检查。我只是想知道当我们想给开发人员机会调试他们的代码而不给他们提供可能包含其他敏感数据的apache错误日志时,是否仍然有可能使apache和php错误日志分开。
迈克尔·斯托姆

7

不要设置error_log到你的syslog东西去,eg /var/log/apache2因为他们的错误将得到由拦截ErrorLog。而是subdir在您的项目文件夹中创建一个日志并执行php_value error_log "/path/to/project/logs"。这适用于.htaccess 文件和虚拟主机。另外,还要确保你把php_flag log_errors


有趣。这种行为是否取决于error_log文件的路径?
demonkoryu

6

您是否尝试过将添加php_value error_log '/path/to/php_error_log到您的VirtualHost配置中?


6

是的,您可以尝试,

php_value error_log "/var/log/php_log" 

.htaccess也可以让用户使用ini_set()他们的脚本的开始。如果他们希望有记录。

另一个选择是使脚本默认为php.ini包含脚本的文件夹中的,然后转到用户/主机的根文件夹,再转到服务器的根目录或类似名称。这将允许主机添加自己的php.ini值和自己的error_log位置。


6
php_value error_log "/var/log/httpd/vhost_php_error_log"

它对我有用,但是我必须更改日志文件的权限。

否则Apache会将日志写入error_log


5

我的Apache在httpd.conf中有类似的内容。只需更改ErrorLog和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>

1
我们在这里谈论的是PHP日志,而不是Apache日志。
demonkoryu

4

你可以试试:

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

但是我不确定它是否会起作用。我尝试在自己的网站上没有成功。


2

创建简单的VirtualHost:

示例主机名:- thecontrolist.localhost

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

    127.0.0.1 thecontrolist.localhost 在主机文件中

  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. 不要忘记重新启动您的Apache。有关更多信息,请检查此链接

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.