PHP目前不会记录从命令行产生的错误。
我有:
log_errors = On
error_log = /var/log/php_errors.log
在文件/etc/php5/cli/php.ini中。
我是否遗漏了进一步的设置来使其正常工作?
发布于 2011-06-17 22:46:04
请检查运行PHP CLI的用户帐户是否具有对/var/log/php_errors.log
的写入权限。
此外,您可以验证是否使用了正确的php.ini文件,如下所示:
php -a -c /etc/php5/cli/php.ini
发布于 2014-07-24 01:01:48
当在Ubuntu 12.04 (精确穿山甲)环境中设置PHP CLI日志时,这个问答线程对我非常有帮助,所以我想发布一个提炼我所学知识的答案。除了大量的信息provided by David Chan以及as George Cummins之外,我还创建了一个logrotate.d
脚本来确保PHP错误日志不会失控,并对其进行了设置,以便多个用户能够将错误记录到公共的PHP错误日志中。
首先,PHP CLI的默认行为是将错误消息记录到标准输出;记录到文件不是默认行为。这通常意味着登录到运行PHP CLI命令的同一命令行终端会话。虽然PHP文件确实有针对指定error_log
的调整,但需要进行额外的调整才能真正使其正常工作。
首先,我必须创建一个初始的php_errors.log
文件:
sudo touch /var/log/php_errors.log
由于有问题的服务器是由从事各种项目的web开发人员使用的,因此我为他们建立了一个名为www-users
的公共组。在本例中,我希望www-users
可以读写php_errors.log
,我像这样更改了文件的所有权:
sudo chown root:www-users /var/log/php_errors.log
然后将该文件的权限更改为:
sudo chmod 664 /var/log/php_errors.log
是的,从安全的角度来看,在www-users
中拥有一个任何人都可以读写的日志文件并不是很好。但这是一个受控的共享工作环境。所以我相信用户会尊重这样的东西。此外,当PHP从CLI运行时,任何可以执行此操作的用户都将需要对日志进行写访问,甚至需要写入日志。
接下来,进入/etc/php5/cli/php.ini
来调整默认的Ubuntu12.04设置,以匹配这个新的日志文件:
sudo nano /etc/php5/cli/php.ini
幸运的是,log_errors
在Ubuntu12.04中是默认启用的:
log_errors = On
但是,为了允许记录到文件,我们需要更改error_log
以匹配新文件,如下所示:
error_log = /var/log/php_errors.log
设置logrotate.d
脚本。
现在应该就是这样了,但是因为我不想让日志失控,所以我为php_errors.log
设置了一个logrotate.d
。在/etc/logrotate.d/
中创建一个名为php-cli
的文件,如下所示:
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’s tip测试设置
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.
发布于 2013-11-09 03:41:47
作为诊断,您可以尝试以这种方式强制写入错误日志:
php -c /etc/php5/cli/php.ini -r " error_log('test 123'); "
现在,您应该在日志中看到测试123:
tail /var/log/php_errors.log
https://stackoverflow.com/questions/6387542
复制相似问题