PHP封裝異常類,註冊錯誤和異常處理機制

PHP 註冊錯誤和異常處理機制php

介紹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();
相關文章
相關標籤/搜索