2008-11-26 66 views
1

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

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

此刻我按照PHPs websites, found here的例子。因此,它会创建一个文本字符串以及随后通过电子邮件发送的XML文件。我稍微修改了这一点以保留所有错误,直到脚本结束,然后发送附带XML文件的电子邮件。 (由于循环中的错误,我已经让几台邮件服务器发送了超过500,000封电子邮件。)大多数情况下,这是完美的。 (我也创建了一个对象来执行所有错误处理。)

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

因此,我在添加gzcompress()之前将其存储在变量中。这有帮助,但是如果数据量非常大,它仍然用完内存。 (在最近的情况下,它想要使用2GB左右)。

我想知道还有什么其他的解决方案,或者你如何修改它使它工作?

那么几个要求:

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

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

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

回答

1

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

1

一种方法可以是在您的应用程序中正确的异常管理,即控制记录哪些错误。

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

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

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

0

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

0

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

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

相关问题