对于大多数生产网站,您希望尽快知道何时出现错误。我的问题是如何最好地获取这些信息。
通常情况下,最好在电子邮件中收到错误,因为我不会每天都坐下来看错误日志,直到出现错误 - 这是不可能的,因为我有20个或更多不同的生产网站服务器。这些错误可能包括:未设置的变量,收到的无效数据或查询错误。
目前我已按照PHPs websites, found here上的示例进行操作。因此,它会创建一个文本字符串以及一个XML文件,然后通过电子邮件发送该文件。我稍微修改了这个以保留所有错误,直到脚本结束,然后发送附带XML文件的电子邮件。 (由于循环中的错误,我已经崩溃了一些邮件服务器发送超过500,000封电子邮件。)大部分时间这都完美无缺。 (我还创建了一个对象来执行所有错误处理。)
当wddx_serialize_value()
处理的数据量很大时,就会出现问题。然后,如果有多个错误,那么它最终会占用大量内存,大部分时间都比允许使用的脚本多。
因此,我在XML文件中添加了gzcompress()
,然后将其存储在变量中。这有帮助,但如果数据量非常大,它仍然会耗尽内存。 (在最近的一个案例中,它想要使用大约2GB。)
我想知道有什么其他解决方案或者你如何修改它以使其有效?
所以有一些要求:
编辑:我需要与错误相关的其他信息,而不仅仅是错误字符串。通常我发现重现错误几乎是不可能的,因为它是由用户输入引起的,除非我获得更多信息,否则我不知道。我已尽力投入信息性错误,但您永远不知道用户将如何使用系统或他们将要放入哪些垃圾数据。因此,我需要的不仅仅是错误文本/字符串。
编辑2:无法将错误记录到数据库中,因为据我所知,数据库可能不存在。需要一些非常有保证能够运行的东西。此外,这些网站并非都在1台服务器上,而且我经常无法访问服务器上的cron(愚蠢的托管公司)。
答案 0 :(得分:1)
我没有设置自定义错误处理程序,而是像往常一样让错误转到错误日志。我设置了一个定期运行的cron并监视错误日志中的更改 - 如果更改,它会向我发送一封仅包含更改的电子邮件。您可以改进此过程并解析更改以更好地满足您的需求 - 例如,仅向您发送超过特定级别的错误(例如E_WARNING及以上)。
答案 1 :(得分:1)
一种方法可能是在您的应用程序中进行适当的异常管理,即控制记录哪些错误。
每个引发的异常都会在数据库中记录错误详细信息。
然后,您可以编写一个小应用程序来搜索错误数据库,也许只搜索所有网站。
这样可以避免大量不可读的日志文件,因为所有内容都已编入索引并可快速搜索。 当数据库太大时,可以通过cron作业截断日志表。
答案 2 :(得分:0)
Anacron,一个通过电子邮件发送更改到错误日志*和错误日志文件的cron作业就足够了。 cron作业可以在发送电子邮件之前完成所需的所有处理。
答案 3 :(得分:0)
我过去使用的一件事是epylog,它是一个用python编写的非常灵活的日志监控应用程序。您可以将其设置为监视错误日志,并将错误(或部分错误)包含在通过电子邮件发送给您的日志摘要中。
我倾向于将更详细的错误数据存储在服务器上的平面文件中,并向您发送电子邮件,告诉您检查日志。监视错误目录或文件以进行更改并设置速率限制的cron作业将是最小化对正在运行的应用程序的影响的好方法。