说一说在 PHP 开发中关于 error log 的一些建议。总的来说有以下四条建议:

  • 一定要让 PHP 报告错误
  • 在开发环境要显示错误
  • 在生产环境不能显示错误
  • 在开发环境和正式环境都要记录错误

根据以上建议,我们需要修改 php.ini 里面的 error_reporting、display_errors、display_startup_errors、log_errors、error_log 几个配置项。

php.ini 为开发环境的配置如下:

;显示错误
display_errors = On
display_startup_errors = On
;报告所有错误
error_reporting = -1
;记录错误
log_errors = On
error_log = your_log_path

php.ini 为生产环境的配置如下:

;不显示错误
display_errors = Off
display_startup_errors = Off
;除注意事项之外报告所有其它错误
error_reporting = E_ALL & ~E_NOTICE
;记录错误
log_errors = On
error_log = your_log_path

这两个环境之间的主要区别是,在开发环境执行 PHP 脚本是会在输出中显示错误,而在生产环境不会显示。不过,在两个环境中都记录了错误。如果在生产环境中 PHP 应用有 bug 发生(尽量避免这种情况发生),可以查看 PHP 日志文件中的详情。

在某些特殊的情况下,为了避免 ini_set 修改部分配置的值,我们可以在 php-fpm.conf 利用 php_admin_valuephp_admin_flag 配置。