2010-05-31 31 views
3

我们有一个网络服务器,我们即将启动一些应用程序。在服务器级别上,我们设法在Hyperic的帮助下处理错误处理,以通知负责数据库/ memcached服务器关闭的人员。在应用程序基础上记录/处理错误?

但是,我们仍然需要处理那些发生在应用程序级别上的最终错误和日志事件,以便在客户通知之前改进我们客户的应用程序。

那么,什么是那么一个好的解决办法做到这一点?
利用PHP:自己的错误日志将很快成为cloggered,如果我们将在同一时间运行的应用程序一个大数目。如果你喜欢结构,这可能不是最好的选择。

一种想法是构建具有接收错误消息并且将它们存储的加密和序列化数组到一个数据库中的REST/JSON API一个场外轻质错误处理应用程序。也许它可以,根据错误的严重程度也可以直接输入到我们的错误跟踪器。
可能是花了几个小时,但它似乎是一个相当脆弱的解决方案,我相信已有更好的更可靠的替代方案。

谢谢,

回答

4

为什么使用PHP自己的error_log快速变成'cloggered'?如果一切顺利,你不会看到很多错误,对吗?

建立一个单独的应用程序,尤其是使用API​​,只是错误报告增添了不少的故障点进行错误记录,如果你问我。你或许可以构建一个应用程序来检查各种服务器上的现有错误日志/不同的应用程序,以便能够在一种错误仪表板中显示它们,这样你就可以看到什么时候事情真的会出错。

但我有兴趣看看其他人那么远又为自己可能意味着什么,以及,我都没有想到。

+0

当然,我们的目标是始终保持最终的误差数低,但随后而来的人的因素。我相信,当部署到客户生产应用程序等时,我们会在某一时刻搞砸一些东西。您的方法绝对是一个需要考虑的方法! – Industrial 2010-05-31 17:11:37

+1

人的因素,应用程序的最糟糕的噩梦;)我知道你在说什么,但如果你要开发一些新的东西我敢肯定有监控现有错误日志的好办法的时候(我有一个单独的一个每个应用程序)。刚开始使用的最后修改日期,也许是文件大小(如果它一夜之间翻倍有可能出错)2个东西我想...我被这个想法寿好奇,或许会喜欢的东西添加到我的项目”待办事项名单。 – CharlesLeaf 2010-05-31 17:18:28

1

你可以使用set_exception_handlerset_error_handler收集更多的具体信息,并的方式,将缓解“cloggering”报告。您可以为每个客户端或应用程序执行不同的文件,引入您自己的代码,以便通过错误解析脚本轻松进行处理等。

我会在向错误处理过程中引入额外的代码或基础结构时小心谨慎。它需要超级坚实,所以你可以信任你得到的信息。直接向数据库报告错误?数据库连接错误怎么办? (和和)

2

我们实际上tail -f服务器的PHP错误日志中的各种输出,而且还搭上了很多例外的我们抛出自己。通过抛出一个自定义的异常,你可以将它(根据当然的优先级)写入你的数据库,日志流,错误跟踪器和/或邮件负责那些模块。当然,你应该登录为何异常发生(例如,var_export()/serialize()你扔在一个异常的方法的func_get_args()。让异常消息巨大,因为它会救你。

除了这个,我们使用Zend_Log,其中异常有点矫枉过正(例如,如果给予该方法的参数应该被弃用,我们可能会记录一下debug_backtrace()以查看该调用来自哪里。这可以扩展到制作昂贵的电话等的图形程序,但是这是一个题外话:)

我最好的提示:知道你的应用程序可能会失败,并在那里可以,这不是容易得多,以搜索错误。确保基于外部服务引发的错误被解释为这样。

......说实话,我认为这种想法(Error-API/-Service on app。level)有点奇怪:如果你知道如何处理它,你怎么能够防止错误呢?你不会避免/自动化它吗?

1

你要搜索的内容是PHP的错误处理功能:http://de.php.net/manual/en/ref.errorfunc.php

特别有趣的是的set_error_han dler(),它允许你将完全覆盖PHP的内部错误处理程序。

有了,你可以使自己的日志每个应用程序/发送电子邮件给管理员/错误信息保存到DB /告诉用户管理员已通知或什么的。

无论是通过返回true或false,你还可以控制阉PHP的内部错误处理程序应该运行功能后,还是不行。