【问题标题】:error_log per Virtual Host?每个虚拟主机的error_log?
【发布时间】:2010-09-05 05:41:45
【问题描述】:

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

httpd.conf<Location> 中覆盖此设置似乎没有任何作用。

有没有办法为每个虚拟主机设置单独的 php error_logs

【问题讨论】:

    标签: linux apache virtualhost


    【解决方案1】:

    如果有人来看它应该是这样的:

    <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_reportinghttp://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

    【讨论】:

    • 根据您的配置,您可能需要手动创建日志文件并将所有者/组设置为 Apache 正在使用的同一用户/组。如果 Apache 无法写入日志文件,它不会警告您。
    • 请注意,随着新版本的 PHP 添加更多错误级别,“error_reporting”值会发生变化。 E_ALL = "30719" 现在。
    • 由于“error_reporting”值不断变化,并且由于您不能在 php 之外使用诸如“E_ALL”和“E_STRICT”之类的 PHP 常量,因此您可以确保始终记录所有错误:php_value error_reporting 2147483647
    • 你为什么要在你的公共域空间中登录?
    • 日志文件不会公开。 /html/ 是公共空间。
    【解决方案2】:

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

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

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

    Apache Error Log Page

    【讨论】:

    • 那是apache错误日志,和PHP错误日志是分开的(见其他cmets)
    • 相对于什么? httpd.conf 所在的目录,或者?
    【解决方案3】:

    我通常只是在.htaccess 文件中指定它我正在处理的域上的vhost.conf。将此添加到以下文件之一:

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

    【讨论】:

    【解决方案4】:

    error_log() 的默认行为是输出到 Apache 错误日志。如果这没有发生,请检查您的 php.ini 设置中的 error_log 指令。不设置它以使用当前虚拟主机的 Apache 日志文件。

    【讨论】:

    • 我会检查的。我只是想知道当我们想让开发人员有机会调试他们的代码而不给他们可能包含其他敏感数据的 apache 错误日志时,是否仍然可以将 apache 和 php 错误日志分开。
    【解决方案5】:

    不要将error_log 设置为您的syslog 内容所在的位置,eg /var/log/apache2,因为它们的错误将被ErrorLog 拦截。相反,在您的项目文件夹中为日志创建一个subdir,然后执行php_valueerror_log "/path/to/project/logs"。这适用于.htaccess 文件和虚拟主机。还要确保你把php_flaglog_errors放在了

    【讨论】:

    • 有趣。此行为是否取决于 error_log 文件的路径?
    【解决方案6】:

    尝试将php_value error_log '/path/to/php_error_log 添加到您的 VirtualHost 配置中。

    【讨论】:

      【解决方案7】:

      是的,你可以试试,

      php_value error_log "/var/log/php_log" 
      

      .htaccess 中,或者如果用户想要进行日志记录,您可以让用户在脚本开头使用ini_set()

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

      【讨论】:

        【解决方案8】:
        php_value error_log "/var/log/httpd/vhost_php_error_log"
        

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

        否则 Apache 会将日志写入其error_log

        【讨论】:

          【解决方案9】:

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

          【讨论】:

          • 我们在这里讨论的是 PHP 日志,而不是 Apache 日志。
          【解决方案10】:

          你可以试试:

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

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

          【讨论】:

            【解决方案11】:

            创建简单的虚拟主机:

            示例主机名:- 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。 更多check这个链接

            【讨论】:

              猜你喜欢
              • 2019-01-10
              • 2017-11-05
              • 1970-01-01
              • 2010-10-07
              • 1970-01-01
              • 2023-03-19
              • 2019-01-25
              • 2014-11-04
              • 2020-12-01
              相关资源
              最近更新 更多