PHP CLI 不会记录错误

PHP 当前不会记录从命令行生成的错误。

我有:

log_errors = On
error_log = /var/log/php_errors.log

在文件 /etc/php5/cli/php.ini.

我是否缺少进一步的设置来使其正常工作?


答案 1

请检查运行 PHP CLI 的用户帐户是否具有 对 的写入权限。/var/log/php_errors.log

此外,您可以验证您使用的是正确的 php.ini 文件,如下所示:

php -a -c /etc/php5/cli/php.ini

答案 2

Ubuntu 12.04(精确穿山甲)环境中设置PHP CLI日志记录时,这个问答线程对我非常有用,所以我想发布一个提炼我学到的知识的答案。除了David Chan和George Cummins提供的重要信息外,我还创建了一个脚本来确保PHP CLI错误日志不会失控,并设置了这个脚本,以便多个用户能够将错误记录到常见的PHP CLI错误日志中。logrotate.d

首先,PHP CLI 的默认行为是将错误消息记录到标准输出;记录到文件不是默认行为。这通常意味着登录到运行 PHP CLI 命令的同一命令行终端会话。虽然PHP ini文件确实具有指定的附加调整,但需要进行适当的调整才能真正使其正常工作。error_log

首先,我必须创建一个初始文件:php_errors.log

sudo touch /var/log/php_errors.log

由于有问题的服务器是由从事各种项目的Web开发人员使用的,因此我为他们建立了一个名为.在这种情况下,我希望通过我更改文件的所有权来读取和可写,如下所示:www-usersphp_errors.logwww-users

sudo chown root:www-users /var/log/php_errors.log

然后将文件的权限更改为:

sudo chmod 664 /var/log/php_errors.log

是的,从安全的角度来看,让任何人都可以读取和写入的日志文件并不是那么好。但这是一个受控的共享工作环境。所以我相信用户会尊重这样的事情。此外,当PHP从CLI运行时,任何可以做到这一点的用户都需要对日志的写入权限才能写入日志。www-users

接下来,进入以调整默认的Ubuntu 12.04设置以匹配此新日志文件:/etc/php5/cli/php.ini

sudo nano /etc/php5/cli/php.ini

在 Ubuntu 12.04 中,“愉快”默认启用:log_errors

log_errors = On

但是要允许记录到文件,我们需要更改 以匹配新文件,如下所示:error_log

error_log = /var/log/php_errors.log

设置脚本。logrotate.d

现在应该就是这样了,但是由于我不希望日志失控,因此我为.创建一个调用的文件,如下所示:logrotate.dphp_errors.logphp-cli/etc/logrotate.d/

sudo nano /etc/logrotate.d/php-cli

并将此日志旋转守护程序脚本的内容放在那里:

/var/log/php_errors.log {
        weekly
        missingok
        rotate 13
        compress
        delaycompress
        copytruncate
        notifempty
        create 664 root www-users
        sharedscripts
}

测试设置。

完成此操作后,让我们使用David Chan的提示测试设置:

php -r "error_log('This is an error test that we hope works.');"

如果运行正确,您应该只是被退回到一个空的命令提示符,因为PHP CLI错误不再发送到标准输出。因此,请检查测试错误消息的实际情况,如下所示:php_errors.log

tail -n 10 /var/log/php_errors.log

那里应该有一个带时间戳的错误行,看起来像这样:

[23-Jul-2014 16:04:56 UTC] This is an error test that we hope works.

推荐