簡體   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