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

时间:2011-09-21 13:26:28

标签: apache logging php

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

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

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)而不是我上面指定的错误日志。

我已经尝试过的事情:

  1. 我在更改php.ini文件后停止并重新启动了apache
  2. 文件/var/log/apache2/php_errors.log是777权限,文件存在。
  3. 没有其他重写的php.ini文件。 (有/etc/php5/cli/php.ini,但我没有使用cli)。
  4. php.ini文件中没有其他error_log = xxx设置可以推翻第一个
  5. phpinfo()在本地值和主值下显示error_log = /var/log/apache2/php_errors.log(即正确的文件)
  6. 我用来生成错误的测试脚本不包含任何ini_set调用
  7. (仅供参考:我在Ubuntu 11.04上使用Apache / 2.2.17和PHP / 5.3.5-1ubuntu7.2)

    我做错了什么?

7 个答案:

答案 0 :(得分:14)

我想回答这个问题,因为即使这是一个老问题,它仍然是谷歌的一个很好的结果。

我通过为日志目录中的所有用户添加写权限来解决这个问题。

在我的情况下,用户'http'需要能够写入/ var / log / httpd /所以我跑了

# chmod a+w /var/log/httpd

如果该文件已存在,则可能有助于首先将其删除并允许Apache创建它。

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

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

答案 1 :(得分:2)

您可以尝试指定如下文件名:

我在Ubuntu上使用Apache 2.2.22。

使用此PHP命令:

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

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

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

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/en/function.error-log.php

答案 2 :(得分:0)

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

rm -f /var/log/apache2/php_errors.log
service apache2 restart

ll /var/log/apache2/php_errors.log

答案 3 :(得分:0)

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

<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

答案 4 :(得分:0)

确保Apache用户对日志文件路径中的任何父文件夹至少具有EXECUTION权限。没有它,Apache无法列出文件夹中的任何内容,因此看不到日志文件。

ls
drwxr-x--- root adm folder

chmod o+x folder

ls
drwxr-x--x root adm folder

那是一个真正的陷阱! ;-)

然后,还要检查Apache用户是否确实具有对实际日志文件的读写权限。

答案 5 :(得分:0)

我遇到了这个问题,然后我给了 apache 日志文件夹的正确权限,然后使用以下命令重新启动了我的 apache:

sudo chmod a+w /var/log/apache2/
sudo service apache2 restart

答案 6 :(得分:-4)

我今天花了几个小时试图弄清楚为什么这不起作用并试图调试代码解决我可以将任何内容记录到php错误日志的事实。毋庸置疑,我正在以蜗牛的速度前进,直到我开始进行伐木工作。

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

chmod 777 myphperror.log

感谢上帝对stackoverflow.com的了解