摘要:于是查到有一個鉤子的功能最終有鉤子能滿足需求在系統執行的早期調用,這個時候只有基準測試類和鉤子類被加載了,還沒有執行到路由或其他的流程。
最近線上項目最近偶爾報500錯誤,雖然根據日志可以拿到引發錯誤的請求參數,但是還是要自己去模擬請求,更甚著,由于等到自己去模擬請求的時候,引發錯誤的主體(比如,同樣的訂單,同樣的請求參數,訂單狀態為3時會報錯,但是當你去模擬的時候,訂單狀態已經變為4了,此時又不會報錯了)的狀態已經發生變化,因此需要保存發生錯誤時候的上下文。
于是查到CI有一個鉤子的功能
最終有pre_system鉤子能滿足需求:
pre_system 在系統執行的早期調用,這個時候只有 基準測試類 和 鉤子類 被加載了, 還沒有執行到路由或其他的流程。
具體使用方法如下:
在對應項目的hooks.php里添加
$hook["pre_system"][] = array( "class" => "ErrorCatch", "function" => "errorCatchInit", "filename" => "ErrorCatch.php", "filepath" => "controllers/app", //這里不要加APPPATH );
然后新建對應的類
最終錯誤處理類如下:
class ErrorCatch { public function errorCatchInit() { register_shutdown_function([$this, "handleShutdown"]); } public static function handleShutdown() { //write_log(); } }
但此時還不能捕獲錯誤日志,因為CI本身自己實現了一套register_shutdown_function,在core/Common.php的_error_handler方法里,有如下代碼
$is_error = (((E_ERROR | E_PARSE | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity); · · · if ($is_error) { exit; //直接就腳本退出了 }
有多個register_shutdown_function callback時,當前面的exit后,就不會觸發后面的callback了, 于是:
在index.php里添加 define("SELF_ERROR_SHUT_DOWN", 1); 然后 if ($is_error) { exit; //直接就腳本退出了 } 改為 if ($is_error) { if (defined("SELF_ERROR_SHUT_DOWN")) { return; } exit; }
至此,就可以統一收集程序錯誤,并且上報了
原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26115.html
摘要:請求未通過的驗證時會拋出此異常。異常處理是非常重要但又容易讓開發者忽略的功能,這篇文章簡單解釋了內部異常處理的機制以及擴展異常處理的方式方法。 異常處理是編程中十分重要但也最容易被人忽視的語言特性,它為開發者提供了處理程序運行時錯誤的機制,對于程序設計來說正確的異常處理能夠防止泄露程序自身細節給用戶,給開發者提供完整的錯誤回溯堆棧,同時也能提高程序的健壯性。 這篇文章我們來簡單梳理一下...
摘要:一的幾個函數異常捕獲自定義處理函數注冊錯誤捕獲自定義處理函數注冊程序執行時異常終止錯誤捕獲處理函數注冊這三個函數在錯誤處理控制中給開發者提供了很大的自主空間,在日志系統中記錄日志信息有他們的功勞。下面要說的類庫是借鑒了日志系統的設計。 引言 接觸過php框架的朋友們可能都知道,日志在項目中的重要作用了,他可以幫助我們定位錯誤的位置,讓程序更友好(處理得當的話不會直接拋出一大堆只有程...
摘要:回過頭來發現,我們的項目,雖然在服務端層面做好了日志和性能統計,但在前端對異常的監控和性能的統計。對于前端的性能與異常上報的可行性探索是有必要的。這是我們頁面加載性能優化需求中主要上報的相關信息。 概述 對于后臺開發來說,記錄日志是一種非常常見的開發習慣,通常我們會使用try...catch代碼塊來主動捕獲錯誤、對于每次接口調用,也會記錄下每次接口調用的時間消耗,以便我們監控服務器接口...
閱讀 594·2021-11-18 13:12
閱讀 1314·2021-11-15 11:39
閱讀 2473·2021-09-23 11:22
閱讀 6194·2021-09-22 15:15
閱讀 3655·2021-09-02 09:54
閱讀 2310·2019-08-30 11:10
閱讀 3245·2019-08-29 14:13
閱讀 2913·2019-08-29 12:49