如果 $error_level 等于或高于 E_USER_ERROR,则函数 trigger_error 将终止脚本。
如果编写自己的错误处理程序,则必须自己执行这些操作。
示例,其中我们假设全局 LOG 常量指向 PSR2 日志接口。
<?php
set_error_handler( function ($errno, $errstr, $errfile, $errline) {
if( 0 === error_reporting() ) {
return false;
}
switch($errno) {
default:
LOG->error( "未知错误类型:["$errno"] "$errstr", [ 'file' => $errfile, '@' => $errline ] );
exit(1);
case E_USER_ERROR: case E_WARNING: LOG->error( $errstr, [ 'file' => $errfile, '@' => $errline ] );
exit(1);
case E_USER_DEPRECATED:
case E_DEPRECATED:
LOG->error( "已弃用 "$errstr", [ 'file' => $errfile, '@' => $errline ] );
break;
case E_USER_WARNING: case E_NOTICE: LOG->warning( $errstr, [ 'file' => $errfile, '@' => $errline ] );
break;
case E_USER_NOTICE:
LOG->notice( $errstr, [ 'file' => $errfile, '@' => $errline ] );
break;
case E_ERROR: case E_RECOVERABLE_ERROR:
LOG->critical( $errstr, [ 'file' => $errfile, '@' => $errline ] );
exit(1);
}
return true;
} );
?>