如何在系统日志中显示 PHP 错误

11
我有一个定时运行在 crontab 上的脚本。我注意到我无法在任何地方看到 PHP 错误。我希望能够在 /var/log/syslog 或其他地方记录 PHP 错误。我尝试配置我的 php.ini 以将错误记录在 /var/log/php-errors.log,并检查了权限并重新启动了 Apache 服务,但仍然没有日志。

你在php.ini里放了什么?error_loglog_errorserror_reporting 是记录日志到文件的三大关键。 - Marc B
error_log = /var/log/php_errors.log,log_errors = 开启,error_reporting = E_ALL&~E_DEPRECATED - madkris24
运行该程序的账户是否在 /var/log 目录下以及特别是 php-errors.log 文件中拥有写入权限? - Marc B
我不熟悉如何检查用户是否具有在/var/log中写入权限,但它确实具有php-errors.log的权限。 - madkris24
4个回答

10

我在我的/etc/php5/cli/php.ini文件中有这个配置(我使用Debian,我假设你使用的系统也是相同的),它会将所有的cron错误写入到/var/log/messages文件中:

error_reporting  =  E_ALL & ~E_NOTICE
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 0
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
error_log = syslog

6
尝试在你的php.ini中使用 error_log = syslog

5

需要考虑两个问题:

首先,PHP CLI使用的php.ini与通过Apache运行的PHP版本不同。确保您正在编辑CLI版本中的error_log

其次,请确保您的日志文件可被运行cron的用户写入。通常情况下,日志文件不可被您的用户帐户写入,因此您可能需要编辑权限。


5
在使用syslog进行日志记录时,你并不会写文件,而是由syslog守护进程来完成。这个答案没有意义。 - itsafire

2
在Ubuntu 16.04上,/dev/log的所有者是mysyslog组(由systemd定义)。因此,为了让apache2/php能够写入syslog,你必须将用户www-data添加到mysyslog组中: addgroup www-data mysyslog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接