关于apache:PHP error_log方法不会将错误写入我的错误日志文件

PHP error_log method doesn't write errors to my error log file

PHP error_log方法不会将错误写入自定义错误日志文件。它只会写入/var/log/apache2/php_error.log

这是我的php.ini中的日志记录设置:

1
2
3
4
5
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = Off
log_errors = On
log_errors_max_len = 0 ; also tried with 9999999
error_log = /var/log/apache2/php_errors.log

PHP将其错误写入常规的Apache错误日志(/var/log/apache2/error.log),而不是我上面指定的错误日志。

我已经尝试过的事情:

  • 更改php.ini文件后,我停止并重新启动了Apache
  • 文件/var/log/apache2/php_errors.log具有777权限,并且该文件存在。
  • 没有其他优先的php.ini文件。 (有/etc/php5/cli/php.ini,但我没有使用cli)。
  • php.ini文件下方没有其他error_log = xxx设置,可能会否决第一个设置
  • phpinfo()在本地值和主值下都说error_log = /var/log/apache2/php_errors.log(即正确的文件)
  • 我用来生成错误的测试脚本不包含任何ini_set调用
  • (仅供参考:我在Ubuntu 11.04上使用Apache / 2.2.17和PHP / 5.3.5-1ubuntu7.2)

    我究竟做错了什么?


    我想回答这个问题,因为尽管这是一个老问题,但在Google上还是很高的成绩。

    我通过在日志目录上为所有用户添加写权限来解决此问题。

    就我而言,用户" http"必须能够写入/ var / log / httpd /,所以我运行了

    1
    # chmod a+w /var/log/httpd

    如果文件已经存在,则可以先删除它并允许Apache创建它。

    我的php.ini文件也包含整个路径。

    1
    error_log = /var/log/httpd/php_errors.log

    您可以尝试这样指定文件名:

    我在Ubuntu上使用Apache 2.2.22。

    使用以下PHP命令:

    1
    error_log("eric", 3,"/home/el/error.log");

    第一个参数是要发送到错误日志的消息。第二个参数3的意思是"期望文件名目的地。第三个参数是目的地。

    创建文件/home/el/error.log并将其所有权设置为:

    1
    2
    el@apollo:~$ ll error.log
    -rwxrwxr-x 1 www-data www-data 7 Dec 13 14:30 error.log

    当PHP解释error_log方法时,它将消息附加到您的文件中。

    资源:
    http://www.php.net/manual/zh/function.error-log.php


    您可以在VirtualHost站点配置文件中为站点设置错误日志文件,例如:/etc/apache2/sites-enabled/example.com.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <VirtualHost *:80>

      ....

      ErrorLog ${APACHE_LOG_DIR}/www.example.com-error.log
      LogLevel warn
      CustomLog ${APACHE_LOG_DIR}/www.example.com-access.log combined

    </VirtualHost>

    在Unix系统中,${APACHE_LOG_DIR}通常是/var/log/apache2
    错误和访问权限将保存在${APACHE_LOG_DIR}/www.example.com-error.log${APACHE_LOG_DIR}/www.example.com-access.log中。


    删除php_errors.log并重新启动apache2,服务器本身将创建一个具有适当权限和所有者的新php_errors.log文件。

    1
    2
    3
    4
    rm -f /var/log/apache2/php_errors.log
    service apache2 restart

    ll /var/log/apache2/php_errors.log

    我今天花了几个小时试图弄清楚为什么它不起作用,并尝试调试代码,以解决我可以将任何内容记录到php错误日志这一事实。不用说,直到我开始伐木工作之前,我一直在以蜗牛般的步伐前进。

    我猜想超过90%的时间是权限问题。在我的情况下,守护进程是日志文件的所有者和组,我必须sudo su进行root身份设置,然后更改日志文件的权限。我改为:

    chmod 777 myphperror.log

    感谢上帝的stackoverflow.com