我们有一个Web服务器,我们即将启动许多应用程序。在服务器级别,我们设法在Hyperic的帮助下完成错误处理,以便在数据库/ memcached服务器出现故障时通知负责人。
但是,在客户注意到之前,我们仍然需要处理在应用程序级别上发生的最终错误和日志事件,以改善客户的应用程序。
那么,这样做的好方法是什么呢?
利用PHP:如果我们同时运行大量应用程序,自己的错误日志很快就会被阻塞。如果你喜欢结构,它可能不是最好的选择。
一个想法是构建一个异地轻量级错误处理应用程序,该应用程序具有REST / JSON API,该API接收加密和序列化的错误消息数组并将它们存储到数据库中。也许它可以根据错误的严重程度直接输入到我们的bug追踪器中 可能需要花费几个小时的时间,但这似乎是一个非常脆弱的解决方案,我相信已经有更好的可靠替代品了。
谢谢,
答案 0 :(得分:4)
为什么使用PHP自己的error_log会很快变得“堵塞”?如果一切顺利,你不会看到很多错误,对吗?
如果您问我,构建一个单独的应用程序,尤其是使用API的应用程序,仅用于错误报告,会为错误日志记录添加许多可能的失败点。您可以构建一个应用程序来检查各种服务器/不同应用程序上的现有错误日志,以便能够在一种错误仪表板中显示它们,这样您就可以看到事情真的出错了。
但我很想知道其他人可能会提出什么建议,我还没有考虑过这个问题。
答案 1 :(得分:2)
我们实际上tail -f
服务器的各种输出的php错误日志,但也抓住了很多我们自己抛出的异常。通过抛出自定义异常,您可以将它(基于优先级)写入您的数据库,日志流,您的错误跟踪器和/或邮寄那些负责该模块的内容。当然,您应该记录引发异常的原因(例如,var_export()
/ serialize()
您抛出异常的方法的func_get_args()
。制作异常消息 huge ,因为它会救你。
除此之外,我们使用Zend_Log
,其中异常有点过分(例如,如果不推荐给予该方法的参数,我们可能会记录一点debug_backtrace()
以查看其中的位置电话来自。这可以扩展到制作昂贵电话等图表的程序,但这是一个旁注:)
我的最佳提示:知道您的应用程序可能失败的位置以及无法解决的位置,搜索该错误要容易得多。确保基于外部服务引发的错误被解释为。
...说实话,我认为这种想法(错误-API / -Service on app。级别)有点奇怪:如果你确切知道如何处理它,你怎么能防止错误?你不能避免/自动化吗?
答案 2 :(得分:1)
您可以使用set_exception_handler
和set_error_handler
收集更具体的信息,并以减轻“阻塞”的方式进行报告。您可以为每个客户端或应用程序执行不同的文件,引入您自己的代码,以便通过错误解析脚本轻松处理等。
我要小心为错误处理过程引入额外的代码或基础结构。它需要超级坚固,因此您可以信任您获得的信息。直接向数据库报告错误?那么数据库连接错误呢? (以及之后)
答案 3 :(得分:1)
您要搜索的是PHP错误处理函数:http://de.php.net/manual/en/ref.errorfunc.php
特别有趣的是set_error_handler()允许你完全覆盖PHP的内部错误处理程序。
通过这种方式,您可以为每个应用程序创建自己的日志/向管理员发送电子邮件/将错误信息保存到db /告诉用户已通知管理员或其他任何内容。
通过返回true或false,你也可以控制更好的PHP内部错误处理程序应该在你的函数之后运行。