Code前端首页关于Code前端联系我们

laravel中的异常:级别、处理、日志记录

terry 2年前 (2023-09-25) 阅读数 53 #后端开发

laravel中的异常:级别、处理、Log记录

教程的运行环境:Windows 7系统,Laravel版本9,DELL G3电脑。

laravel 中的异常级别

永久描述
E_ERROR致命的运行时错误。这些类型的错误通常是由不可恢复的情况引起的,例如内存分配问题。这会导致脚本停止并且不再运行。
E_WARNING 运行时警告(非致命错误)。仅出现提示消息,但脚本未完成。
E_PARSE翻译语法解析错误。解析错误仅由解释器生成。
E_NOTICE运行时通知。它表明脚本遇到了显示为错误的情况,但在正常运行的脚本中也可能出现类似的通知。
E_CORE_ERROR 初始化 PHP 时发生致命错误。此错误与 E_ERROR 类似,但由核心 PHP 引擎生成。
E_CORE_WARNINGPHP初始化期间发生的警告(非致命错误)。与 E_WARNING 类似,但由 PHP 引擎生成。
E_COMPILE_ERROR 致命的翻译错误。与 E_ERROR 类似,但由 Zend 脚本引擎生成。
E_COMPILE_WARNING编译时警告(非致命错误)。与 E_WARNING 类似,但由 Zend 脚本引擎生成。
E_USER_ERROR 用户生成的错误消息。与 E_ERROR 类似,但由用户使用代码中的trigger_error() PHP 函数生成。
E_USER_WARNING 用户生成的警告消息。与 E_WARNING 类似,但由用户在代码中使用 trigger_error() PHP 函数生成。
E_USER_NOTICE用户生成的通知消息。与E_NOTICE类似,但由用户使用代码中的trigger_error() PHP函数生成。
E_STRICT 启用 PHP 建议的代码更改,以确保最佳的互操作性和转发器兼容性。
E_RECOVERABLE_ERROR 可捕获的致命错误。表示发生了潜在危险的错误,但尚未使 PHP 引擎处于不稳定状态。如果错误没有被用户定义的处理程序捕获(请参阅 set_error_handler ()),则会出现 E_ERROR  并且脚本将停止。
E_DEPRECATED 运行时通知。如果启用,将出现有关在未来版本中可能无法正常工作的代码的警告。
E_USER_DEPRECATED 用户生成的警告消息。与 E_DEPRECATED 类似,但由用户在代码中使用 trigger_error() PHP 函数生成。
E_ALL 给用户的警告消息。与 E_DEPRECATED 类似,但由用户在代码中使用 trigger_error() PHP 函数生成。

Laravel 异常处理

Laravel 的异常处理在 class\Illuminate\Foundation\Bootstrap\HandleExceptions::class 中提供:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

class 和 ❙ { .功能 bootstrap(应用程序

)❀$'❙ {

$this $app = $app = ;      错误报告 ❃❃(❃❃); set_error_handler([ $this, 'handleError']); register_shutdown_function([ $这个,'handleShutdown']); $app->环境('测试“display_errors”“关闭”);handledException函数。

PHP7 实现了全局可抛出接口。原始异常和一些错误都实现了这个接口,并以接口的形式定义了异常的继承结构。结果,PHP7 中更多的错误成为可捕获的异常并返回给开发人员。如果他们不明白,那就是错误。如果它们被捕获,它们就会成为可以在程序内处理的异常。这些可捕获的错误通常是不会对程序造成致命损坏的错误,例如不存在的函数。

PHP7在/Error异常的基础上,衍生出5个新的引擎异常:ArithmeticError / AssertionError / DivisionByZeroError / ParseError / TypeError。在 PHP7 中,旧的 /Exception 和新的 /Error 都实现了一个公共接口:/Throwable。

因此,如果遇到非Exception类型的异常,首先要转换为FatalThrowableError:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public ❙handleException($e )

{   if 例外){

    $e = 新

$this->getExceptionHandler( )-> >报告(

$e);

if app->runningInConsole()) {

$e$ e >renderForConsole($e);

} ❀ el{

  $ez->renderHttpResponse() FatalThrowableError 扩展 FatalErrorException´ __construct(\Throwable $e) 示例。? }否则($e 示例 Er \ typeror

$m

'正在打字错误:'. $ e-> getMessage ();

$严重性= E_RECOVERABLE_ERROR;   } 其他 {

       = $e->getMessage(); }

:r

$消息,

  A ->setTrace($e->getTrace()); }

}

异常日志

当遇到异常情况时,Laravel 首先做的就是记录日志。这是报告功能的工作。受保护的 back

$this->app->make( ExceptionHandler ::class);

} Laravel 在 Ioc 容器中默认的异常处理类是照亮\基金会\异常:❙\※※ 经理 实施 异常管理合同

{

公开报告(例外 $e )

  | $e)) {

      返回;

}

尝试一下=$这个 ->容器->生产(LoggerInterface::class); (例外$ex){

    ; † }

函数 不应该报告(异常$e

$shouldnotReport(异常$e)= = ($this->不报[HttpResponseException::class]);❃‼返回 ]! null ($type) 使用 († ) }));

}

} } 异常页面显示

捕获日志后,必须对异常进行分页显示异常信息,以便开发者查看问题根源:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

protected function ❀ renderHttpResponse(Exception $e)

{

$这个

这个-顺序(和)> 这个->应用程序 [] . $e)

{

$e = $t;prepareException($e) HttpResponseException) {

      return

‿$ e->getResponse();              返回 $这个重新发送,$->e; ValidationException ->convertValidationExceptionToResponse($e, $request);

}

返回 $this->创建响应($ 请求, $e);

}

对于不同的异常,laravel 可以进行不同的处理,大致有 HttpException、HttpResponseException、AuthorizationException、ModelNotFoundException、AuthenticationException、ValidationException 由于特殊异常 异常有各自不同的需求,在此讨论我们不提供的文章。本文继续展示如何处理HttpException最常见的异常:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

protected function 响应❙任务,例外

$ e)

{

if pException( ) $e)) { ), $e );

$这个 ->IlluminateResponse($这个->ExceptionToResponse() ) 受保护 函数renderHttpException(HttpException ) $e)

{

$状态‼ $e ->getStatusCode();

视图( )-> 替换命名空间('错误),

__DIR__.'/视图']);

ha

哈哈

->()( “错误::{$状态}”)) {

    返回

“错误::{$stat us}”“,[ 异常 $ e->getHeaders());

  $this }

}

对于HttpException,错误状态码选择不同的错误页面模板。如果没有相关模板,则通过 SymfonyResponse 创建异常显示页面:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

protected。 $e = FlattenException::create( ? SymfonyExceptionHandler(config('app.debug) ')) : $e e

$e

$e

$e❙❙ ->getStatusCode(), $e->getHeaders()); 保护功能$答案,异常 $e)

{

   ($响应) )Symfony 重定向 [ $redirect ->all()) ;

}其他= 响应($ † $answer ->例外($e );

}

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门