【发布时间】:2010-10-06 19:42:12
【问题描述】:
对于我当前的 Web 开发项目,我正在实施一个后端系统,该系统将标记错误并自动向管理员发送一封电子邮件,其中包含有关所发生情况的详细信息。捕获错误并使用适当的错误信息生成电子邮件非常简单;但是当人们考虑某些错误类型时就会出现问题,尤其是当网站被频繁访问时。
考虑几个例子:
- 意外的数据库中断导致 Web 服务器上的所有脚本都无法连接。如果说数据库服务器需要 2 分钟(120 秒)才能重新联机,并且 Web 服务器以 10/秒的速率接收 唯一 请求,那么在数据库服务器花费的时间重新上线后,管理员的电子邮件将被 1200 封相同的电子邮件淹没,所有电子邮件都在抱怨连接到数据库失败。
- 脚本中的一个错误设法通过测试偷偷摸摸,并且是完全搞砸内容生成的各种错误,并且仅在特定情况下发生(例如每 100 个请求一次)。再次使用 10/秒的唯一请求率意味着管理员将每 10 秒收到关于相同错误的相同电子邮件,直到它被修复。
我可以使用哪些方法/策略来防止这种情况发生? (我只对监控脚本产生的错误感兴趣,基础设施问题超出了这个解决方案的范围)
我假设我几乎总是可以使用传递给set_error_handler 设置的错误处理程序回调的一些值的摘要来唯一地识别错误。
第一个可能也是最明显的解决方案是在数据库中记录,并且仅在自上次发生后经过合理的最短时间段后才发送电子邮件。这不是理想的方法,尤其是在数据库导致问题的情况下。另一种解决方案是在发生错误时将文件写入磁盘,并检查自上次修改文件以来是否经过了合理的最短时间段。 除了我描述的两种方法之外,还有什么机制可以解决这个问题吗?
【问题讨论】:
标签: php email error-handling error-reporting