1

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

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

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

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

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

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

所以有几个要求:

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

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

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

4

4 回答 4

1

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

于 2008-11-26T18:14:52.777 回答
1

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

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

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

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

于 2008-11-26T18:21:49.190 回答
0

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

于 2008-11-26T22:56:53.487 回答
0

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

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

于 2008-11-26T23:14:27.867 回答