介紹html
全局捕捉異常錯誤,並記錄到日誌系統url
代碼spa
<?php namespace lib; use Exception; class Error { /** * 配置參數 * @var array */ protected static $exceptionHandler; /** * 註冊異常處理 * @access public * @return void */ public static function register() { error_reporting(E_ALL); set_error_handler([__CLASS__, 'error']); set_exception_handler([__CLASS__, 'exception']); register_shutdown_function([__CLASS__, 'shutdown']); } /** * Exception Handler * @access public * @param \Exception|\Throwable $e */ public static function exception($e) { self::report($e); } public function report(Exception $exception) { $data = [ 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'message' => $exception->getMessage(), 'code' => $exception->getCode(), ]; \think\facade\Log::error('錯誤信息',$data); } /** * Error Handler * @access public * @param integer $errno 錯誤編號 * @param integer $errstr 詳細錯誤信息 * @param string $errfile 出錯的文件 * @param integer $errline 出錯行號 * @throws ErrorException */ public static function error($errno, $errstr, $errfile = '', $errline = 0): void { $data = [ 'file' => $errfile, 'line' =>$errline, 'message' => $errstr, 'code' => $errno, ]; \think\facade\Log::error('錯誤信息',$data); } /** * Shutdown Handler * @access public */ public static function shutdown() { if (!is_null($error = error_get_last()) && self::isFatal($error['type'])) { self::error($error); } } /** * 肯定錯誤類型是否致命 * * @access protected * @param int $type * @return bool */ protected static function isFatal($type) { return in_array($type, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]); } }
在入口文件中調用進行註冊.net
// 註冊錯誤和異常處理機制 \lib\Error::register();