在PHP中从生产站点获取错误的最佳方法是什么?

时间:2008-11-26 18:11:30

标签: php error-handling wddx

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

通常情况下,最好在电子邮件中收到错误,因为我不会每天都坐下来看错误日志,直到出现错误 - 这是不可能的,因为我有20个或更多不同的生产网站服务器。这些错误可能包括:未设置的变量,收到的无效数据或查询错误。

目前我已按照PHPs websites, found here上的示例进行操作。因此,它会创建一个文本字符串以及一个XML文件,然后通过电子邮件发送该文件。我稍微修改了这个以保留所有错误,直到脚本结束,然后发送附带XML文件的电子邮件。 (由于循环中的错误,我已经崩溃了一些邮件服务器发送超过500,000封电子邮件。)大部分时间这都完美无缺。 (我还创建了一个对象来执行所有错误处理。)

wddx_serialize_value()处理的数据量很大时,就会出现问题。然后,如果有多个错误,那么它最终会占用大量内存,大部分时间都比允许使用的脚本多。

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

我想知道有什么其他解决方案或者你如何修改它以使其有效?

所以有一些要求:

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

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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