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