我已经找到了如何将错误转换为异常,并且如果没有捕获它们,我会很好地显示它们,但我不知道如何以有用的方式记录它们。简单地将它们写入文件是没有用的,不是吗?当您还不知道导致异常的原因时,您是否会冒险访问数据库?

有帮助吗?

解决方案

我很喜欢 日志4php 用于日志记录,即使它尚未脱离孵化器。我几乎在所有事情上都使用 log4net,并且发现这种风格对我来说非常自然。

对于系统崩溃,您可以将错误记录到多个目标(例如,具有阈值为“严重”或“错误”的附加程序,仅在出现问题时才发挥作用)。我不确定现有附加程序的故障安全性如何 - 如果数据库关闭,该附加程序如何失败? - 但您可以很容易地编写自己的附加程序,如果无法记录,它会优雅地失败。

其他提示

你可以使用 设置错误处理程序 设置自定义异常来记录您的错误。我个人会考虑将它们存储在数据库中,因为默认异常处理程序的回溯可以提供有关导致异常的原因的信息 - 但是,如果数据库处理程序触发了异常,这当然是不可能的。

你也可以使用 错误日志 记录您的错误。它可以选择消息目的地,包括:

引自 错误日志

  1. PHP 的系统记录器,使用操作系统的系统日志记录机制或文件,具体取决于 error_log 配置指令的设置。这是默认选项。
  2. 通过电子邮件发送到目标参数中的地址。这是唯一使用第四个参数 extra_headers 的消息类型。
  3. 附加到文件目标。换行符不会自动添加到消息字符串的末尾。

编辑:Markdown 是否有下划线 noparse 标签?

简单地将它们写入文件是没有用的,不是吗?

但当然是这样——这是一件很棒的事情,比在屏幕上显示它们要好得多。你想向用户展示一个漂亮的屏幕,上面写着“抱歉,我们搞砸了。工程师已收到通知。返回并重试”并且绝对没有技术细节,因为这样做会存在安全风险。您可以将电子邮件发送到共享邮箱并将异常记录到文件或数据库以供稍后查看。这将是一个最佳实践。

我会将它们写入一个文件 - 并可能设置一个监视系统来检查文件大小或上次修改日期的更改。Webmin 是一种简单的方法,但还有更完整的软件解决方案。

如果您知道这是一次性错误,那么通过电子邮件发送通知就可以了。然而,对于每分钟点击次数很多的网站,不要 曾经 通过电子邮件发送通知。我见过一个网站因每分钟生成数百封电子邮件而瘫痪,原因是系统无法连接到数据库。事实上,由于邮件服务器为每条新消息运行,因此它的 LoadAvg > 200 根本没有帮助。在这种情况下 - 到目前为止,最好的方案是看门狗检查文件大小并连接到外部服务以发送短信(可能是即时消息),或者让外部系统在网页上查找错误消息(不必在屏幕上可见 - 它可以在 HTML 注释中)。

我认为这很大程度上取决于您的错误发生的位置。如果数据库已关闭,则将其记录到数据库并不是一个好主意;)

我用 系统日志() 函数用于记录错误,但是当我在没有系统日志支持的系统上时,将其写入文件没有问题。您可以轻松设置系统以向您发送电子邮件或 jabber 消息,例如使用 日志观察 或者 标准 syslogd.

我第二个log4php。我通常将其配置为发送诸如 ERROR 或 CRITITCAL 异常之类的内容,并将它们写入系统日志。从那里,您可以将系统日志输入 泽诺斯, 纳吉奥斯, 斯普朗克 或 syslog 可以对话的任何其他东西。

您还可以使用 Google Forms 捕获并记录 PHP 异常。有一个教程 这里 这解释了这个过程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top