PHP CLI不会logging错误
PHP目前不会logging命令行产生的错误。
我有 :
log_errors = On error_log = /var/log/php_errors.log 在/etc/php5/cli/php.ini中
我错过了进一步的设置来得到这个工作?
 请检查运行PHP CLI的用户帐户是否具有对/var/log/php_errors.log写入权限。 
另外,你可以validation你正在使用正确的php.ini文件,如下所示:
 php -a -c /etc/php5/cli/php.ini 
 这个问答线程在设置Ubuntu 12.04环境中的PHP CLI日志时对我非常有帮助,所以我想发布一个答案,提炼我学到的东西。 除了由David Chan和George Cummins提供的大量信息外,我还创build了一个logrotate.d脚本,以确保PHP CLI错误日志不会失去控制,因此可以设置多个用户将错误logging到常见的PHP CLI错误日志中。 
 首先,PHP CLI的默认行为是将错误消息logging到标准输出; logging到文件不是默认行为。 这通常意味着logging到运行PHP CLI命令的同一命令行terminal会话。 虽然PHP的ini文件确实有一个指定的error_log住宿需要额外的住宿,才能真正使其工作。 
 首先,我必须创build一个初始的php_errors.log文件: 
 sudo touch /var/log/php_errors.log 
 由于有问题的服务器被不同项目的web开发者使用,我为他们build立了一个叫www-users的公共组。 在这种情况下,我想php_errors.log是可读写的www-users我更改文件的所有权像这样: 
 sudo chown root:www-users /var/log/php_errors.log 
然后将文件的权限更改为:
 sudo chmod 664 /var/log/php_errors.log 
 是的,从安全的angular度来看, www-users的任何人都可以读写的日志文件并不是那么好。 但这是一个受控的共享工作环境。 所以我相信用户尊重这样的事情。 另外,当从CLI运行PHP时,任何可以这样做的用户都需要对日志进行写访问,以便写日志。 
 接下来,进入/etc/php5/cli/php.ini来调整默认的Ubuntu 12.04设置以匹配这个新的日志文件: 
 sudo nano /etc/php5/cli/php.ini 
 令人高兴的是,Ubuntu 12.04默认启用了log_errors : 
 log_errors = On 
 但是为了允许日志logging到文件中,我们需要更改error_log以匹配新文件,如下所示: 
 error_log = /var/log/php_errors.log 
 设置一个logrotate.d脚本。 
 现在应该是这样,但是因为我不希望日志失控,所以我为php_errors.log设置了logrotate.d 。 在/etc/logrotate.d/创build一个名为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 } 
testing设置。
 完成之后,让我们用上面David Chan的提示testing设置: 
 php -r "error_log('This is an error test that we hope works.');" 
 如果运行正确,您应该弹回空命令提示符,因为PHP CLI错误不再发送到标准输出。 所以检查实际的php_errors.logtesting错误消息是这样的: 
 tail -n 10 /var/log/php_errors.log 
在那里应该有一个时间戳错误行,看起来像这样:
 [23-Jul-2014 16:04:56 UTC] This is an error test that we hope works. 
作为一个诊断,你可以尝试用这种方式强制写入错误日志。
 php -c /etc/php5/cli/php.ini -r " error_log('test 123'); " 
您现在应该在日志中看到testing123
 tail /var/log/php_errors.log 
PHP的日志/报告行为也依赖于error_reporting。
 在生产模式下,一些PHP框架(例如CodeIgniter)执行error_reporting(E_STRICT)语句或等效语句,这将严重减lesslogging错误的数量/种类。 
如果你想debugging一些东西,那么你可以把下面的语句放在你的代码之前:
 error_reporting(E_ALL); 
如果你不知道为什么或者没有php.ini的用户权限,debugging无信息parsing错误的另一种方法是把你的PHP源代码包装在另一个PHP源代码中,例如:
 ini_set('display_errors',1); error_reporting(E_ALL); include "mybustedfile.php"; 
在PHP文件中
  error_log("You messed up!", 3, "/var/tmp/my-errors.log"); 
在terminal
 tail -f /var/tmp/my-errors.log 
输出 你搞砸了!