繁体   English   中英

PHP-FPM将堆栈跟踪日志分解为单独的事件

[英]PHP-FPM breaks up stack trace log into separate events

我有一个问题,PHP-FPM将单个事件注册为多个事件。 以下面的堆栈跟踪为例:

[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "NOTICE: PHP message: PHP Fatal error:  Uncaught exception 'Zend_View_Exception' with message 'script 'new-layout.mobile.phtml' not found...."
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "Stack trace:"
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "#0 /usr/share/nginx/html/site.com/142-webapp/library/Zend/View/Abstract.php(884): Zend_View_Abstract->_script('new-layout.mobi...')"
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "#1 /usr/share/nginx/html/site.com/142-webapp/library/Zend/Layout.php(796): Zend_View_Abstract->render('new-layout.mobi...')"
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "#2 /usr/share/nginx/html/site.com/142-webapp/library/Zend/Layout/Controller/Plugin/Layout.php(143): Zend_Layout->render()"
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "#3 /usr/share/nginx/html/site.com/142-webapp/library/Zend/Controller/Plugin/Broker...."

如您所见,堆栈跟踪的每一行实际上都是一个具有自己时间戳的单独事件。 将日志转发到另一个服务进行分析时会出现问题,因为当应将每个堆栈跟踪视为一个事件时,它们将被分解。 目前我正在使用Kibana 3,这是一个查看和管理堆栈跟踪的噩梦,因为每一行都是一个单独的事件,并且各个事件并不总是按时间顺序排列。

如何让php-fpm将每个堆栈跟踪注册为一个事件?

不幸的是

PHP-FPM只是将每行PHP输出记录为一个单独的事件。 在PHP-FPM中你无法做任何事情来改变它。

PHP代码

您需要在应用程序中修复此问题(PHP代码)。 有三种方法可以影响PHP报告错误的方式,你可能想要使用全部3:

  • 使用set_error_handler()注册自定义错误处理程序。 除了E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING以及调用set_error_handler()的文件中引发的大部分E_STRICT之外,将调用此处理程序。

  • 使用set_exception_handler()注册自定义异常处理程序。 发生未捕获的异常时会调用此处理程序。

  • 使用register_shutdown_function()注册自定义关闭功能。 在脚本执行完成或调用exit()之后调用此函数。 这个用于检测错误处理程序未处理的错误。

日志库

我可以建议你看一下Monolog 这是一个PSR-3投诉记录库,它也促进了我上面描述的内容。

此外,它还有一个令人印象深刻的“处理程序”列表,可以将日志写入各种服务。 您现在使用的服务很可能就在其中!

替代

另一种选择是创建一个代理脚本,该脚本将读取PHP-FPM日志文件并缓冲行,直到收集到“完整事件”。 然后将其作为单个条目写入您正在使用的服务。

我建议你不要这样走。 编写这样的脚本可能很棘手并且非常容易出错。 从您的应用程序本身进行日志记录更加稳定可靠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM