PHP如何正确处理生产服务器上的关键错误通知


PHP How to correctly handle critical errors notification on a production server.

通常错误都是日志之类的。但是,对于生产服务器上需要注意的重要错误,我该怎么办呢。例如,如果我在一个过程中删除了一系列ORM模型,而在这个过程中,某个模型无法删除。我希望该进程删除尽可能多的对象,并且不会向用户抛出任何异常。我还希望开发人员或管理员收到任何重要错误的通知,这样他们就可以立即得到修复。

过去,我在脚本中添加了一些内容,在某些情况下会通过电子邮件向我发送错误。如果我在一个开发环境中,它只会抛出和异常,然而在生产中,它会安静地死去,并通过电子邮件发送错误。

是否有一些方法可以将某些异常视为更关键的异常,从而使开发人员能够采取行动?我可以创建一个更通用的解决方案吗。EG如果抛出了严重错误/异常,则在生产时始终通过电子邮件发送给管理员,否则将遵循正常程序(如日志)。

可能有一些很棒的软件包可以提供解决方案,但如果可能的话,我正在寻找更原生的软件包。

您可以使用以下行在站点根目录上放置htaccess文件。

# PHP error handling for production servers
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /home/path/public_html/domain/PHP_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0

请勿将error_log放置在公众可进入的位置。

我会记录它们。有几种工具能够监视日志文件,并且可以对某些模式做出反应。

https://www.loggly.com/docs/file-monitoring/

https://mmonit.com/monit/documentation/monit.html#file_content_testing

还有更多

PSR-3被定义为处理这种情况。如果您使用像Monolog这样的兼容日志记录接口,您可以定义如何在每个环境中处理不同的错误级别。也许在开发时,你想在屏幕上显示所有内容,而在直播时,你可能会将所有内容隐藏在CRITICAL下面,并为上面的内容发送Nagios或Pushover警报。