반응형
소개하다.
전역적으로 이상 오류를 포착하고 로그 시스템에 기록합니다.
코드
<?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()) & 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( );
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
PHP는 서버를 이용하여 정시 작업을 실현한다 (0) | 2022.11.02 |
---|---|
php 그림을 mysql bolb 형식으로 저장 (0) | 2022.11.02 |
php redis 연결 끊기 (0) | 2022.11.02 |
php Warning, Notice 오류 캡처 (0) | 2022.11.02 |
php가 같은 id를 병합 (0) | 2022.11.02 |