【问题标题】:What is the best way to get the errors from a production site in PHP?从 PHP 的生产站点获取错误的最佳方法是什么?
【发布时间】:2008-11-26 18:11:29
【问题描述】:

对于大多数生产站点,您希望尽快知道何时出现错误。我的问题是如何最好地获取这些信息。

通常,最好在电子邮件中获取错误,因为我不会每天坐下来查看错误日志,直到出现错误——这是不可能的,因为我在不同的地方有 20 个或更多的生产站点服务器。这些错误可能是任何东西,包括未设置的变量、收到的无效数据或查询错误。

目前我已按照PHPs websites, found here 上的示例进行操作。因此,它会创建一个文本字符串以及一个 XML 文件,然后通过电子邮件发送该文件。我对此稍作修改,以保留所有错误,直到脚本结束,然后发送附有 XML 文件的电子邮件。 (由于循环中的错误,我已经崩溃了几个发送超过 500 000 封电子邮件的邮件服务器。)大多数情况下,这可以正常工作。 (我还创建了一个对象来完成所有的错误处理。)

wddx_serialize_value() 有大量数据流向进程时,就会出现问题。然后如果有多个错误,那么,它确实最终会使用大量内存,大多数时候超过脚本允许使用的内存。

因此,我在 XML 文件中添加了一个附加 gzcompress(),然后将其存储在变量中。这有帮助,但如果数据量非常大,它仍然会耗尽内存。 (在最近的一个案例中,它想使用大约 2GB。)

我想知道还有哪些其他解决方案,或者您如何对其进行修改以使其正常工作?

所以有几个要求:

  • 它必须能够向我发送的不仅仅是错误消息,并且不应该让我登录服务器来弄清楚发生了什么(这样我就可以检查何时移动并确定它是否是紧急事件)
  • 需要限制发送的电子邮件数量。最好的还是 1。
  • 需要正常登录到文件

编辑:我需要与错误相关的其他信息,而不仅仅是错误字符串。通常我发现几乎不可能重现错误,因为它是由用户输入引起的,除非我获得更多信息,否则我不知道。我已尽最大努力输入信息性错误,但您永远不知道用户将如何使用系统或他们将输入什么垃圾数据。因此,我需要的不仅仅是错误文本/字符串。

编辑 2: 无法将错误记录到数据库中,因为据我所知,数据库可能不存在。需要几乎可以保证运行的东西。此外,这些网站并非都在一台服务器上,而且我经常无法访问服务器上的 cron(愚蠢的托管公司)。

【问题讨论】:

    标签: php error-handling wddx


    【解决方案1】:

    我没有设置自定义错误处理程序,而是像往常一样让错误进入错误日志。我设置了一个定期运行的 cron 并监视错误日志中的更改 - 如果它发生更改,它会向我发送一封仅包含更改的电子邮件。您可以改进此过程并解析更改以更好地满足您的需求 - 例如仅向您发送高于特定级别的错误(例如 E_WARNING 及以上)。

    【讨论】:

      【解决方案2】:

      一种方法可能是在您的应用程序中进行适当的异常管理,即控制记录哪些错误。

      每个引发的异常都会在数据库中记录错误详细信息。

      然后,您可以编写一个小应用程序来搜索错误数据库,可能只为您的所有网站提供一个。

      这样可以避免大型不可读的日志文件,因为所有内容都已编入索引并且可以快速搜索。 当您的数据库变得太大时,您可以通过 cron 作业截断日志表。

      【讨论】:

        【解决方案3】:

        Anacron,一个通过电子邮件将更改发送到错误日志*和错误日志文件的 cron 作业就足够了。 cron 作业可以在发送电子邮件之前完成所有需要的处理。

        【讨论】:

          【解决方案4】:

          我以前用过的一个是epylog,它是一个用python写的非常灵活的日志监控应用。您可以将其设置为监控您的错误日志,并将错误(或部分错误)包含在通过电子邮件发送给您的日志摘要中。

          我倾向于将更详细的错误数据存储在服务器上的平面文件中,并向您发送一封电子邮件,告诉您检查日志。监视错误目录或文件的更改并设置了速率限制的 cron 作业将是减少对正在运行的应用程序的影响的好方法。

          【讨论】:

            猜你喜欢
            • 2017-01-27
            • 1970-01-01
            • 1970-01-01
            • 2015-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多