개발 꿀팁/PHP

PHP 패키지 이상 클래스, 등록 오류 및 이상 처리 메커니즘

Jammie 2022. 11. 2. 14:01
반응형

소개하다.

전역적으로 이상 오류를 포착하고 로그 시스템에 기록합니다.

코드

<?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
* @paraminteger $errno 오류 번호
* @paraminteger $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()) &amp; self:: isFatal($error['type'])) {

self::error($error);
}
}

/**
* 오류 유형이 치명적일지 여부 확인
*
* @access protected
* @paramint $type
* @return bool
*/
protected static function isFatal($type)
{
return in_array($type, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);
}


}

엔트리 파일에서 등록하기 위해 호출하기

// 등록 오류 및 이상 처리 메커니즘
\lib\Error::register( );

 

반응형