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

Wil*_*ark 18 php apache logging

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
Run Code Online (Sandbox Code Playgroud)

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(即正确的文件),均为Local Value和Master Value
  6. 我用来生成错误的测试脚本不包含任何ini_set调用

(仅供参考:我在Ubuntu 11.04上使用Apache/2.2.17和PHP/5.3.5-1ubuntu7.2)

我究竟做错了什么?

new*_*ngt 14

我想回答这个问题,因为它在谷歌上取得了很高的成绩,尽管这是一个老问题.

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

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

# chmod a+w /var/log/httpd
Run Code Online (Sandbox Code Playgroud)

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

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

error_log = /var/log/httpd/php_errors.log
Run Code Online (Sandbox Code Playgroud)


Eri*_*ski 5

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

我在 Ubuntu 上使用 Apache 2.2.22。

使用这个 PHP 命令:

error_log("eric", 3, "/home/el/error.log");
Run Code Online (Sandbox Code Playgroud)

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

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

el@apollo:~$ ll error.log
-rwxrwxr-x 1 www-data www-data 7 Dec 13 14:30 error.log
Run Code Online (Sandbox Code Playgroud)

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

来源: http: //www.php.net/manual/en/function.error-log.php


蒋艾伦*_*蒋艾伦 -1

删除 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
Run Code Online (Sandbox Code Playgroud)