laravel5异常及时通知

简介:

项目上线后,都会使用一些异常监控,当然很多时候监控是有限制的,比如要监控PHP异常,类似这种一般都在输出人性化内容而不是直接输出错误内容,很多时候需要捕捉这类异常来进行代码调整。当然也可以定期去查看日志。


laravel5支持自定义异常处理,给这种需求提供了方便,我们完全可以扩展异常处理,通过发送邮件或短信。

打开 app/Exceptions/Handler.php  文件,修改 render 函数代码,增加发送邮件通知功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if  (! $e  instanceof  \Symfony\Component\Debug\Exception\FlattenException) {
     $e  = \Symfony\Component\Debug\Exception\FlattenException::create( $e );
}
$exception  new  \Symfony\Component\Debug\ExceptionHandler();
$content  $exception ->getContent( $e );
$css  $exception ->getStylesheet( $e );
\Mail::queue( 'errors.mail' , [
     'url'  =>  $request ->fullUrl(),
     'request'  =>  $request ->all(),
     'method'  =>  $request ->getMethod(),
     'header'  =>  $request ->header(),
     'content'  =>  $content ,
     'css'  =>  $css
         ],  function  ( $message ) {
     $message ->to( 'name@admin.com' )
             ->cc( 'name1@admin.com' )
             ->subject( '程序异常' );
});

原来的

1
return  parent::render( $request $e );

是返回异常内容或403页面的,如果想页面返回更友好,可以去掉这个代码改成其它内容返回,可直接使用如形式的代码:

1
return  response( '服务器累了,稍后再试!' );


邮件模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
< HTML >
     < HEAD >
         < TITLE >商圈接口异常,请及时维护!</ TITLE >
         < meta  http-equiv = "content-type"  content = "text/html; charset=utf-8" >
         < STYLE >
             html{color:#000;background:#FFF;}
             body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}
             table{border-collapse:collapse;border-spacing:0;}
             fieldset,img{border:0;}
             address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
             li{list-style:none;}caption,th{text-align:left;}
             q:before,q:after{content:'';}
             abbr,acronym{border:0;font-variant:normal;}
             sup{vertical-align:text-top;}
             sub{vertical-align:text-bottom;}
             input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}
             input,textarea,select{*font-size:100%;}
             legend{color:#000;}
             html { background: #eee; padding: 10px }
             img { border: 0; }
             #sf-resetcontent { width:970px; margin:0 auto; }
             {!!$css!!}
         </ style >
     </ HEAD >
     < BODY >
         < h2 >请求地址:</ h2 >
         {{$url}} &nbsp;&nbsp;&nbsp;
         < h2 >请求方式:</ h2 >
         {{$method}}
         < h2 >请求参数:</ h2 >
         < pre >
             {{var_export($request, true)}}
         </ pre >
         < h2 >请求头信息:</ h2 >
         < pre >
             {{var_export($header, true)}}
         </ pre >
         < h2 >异常内容:</ h2 >
         < pre >
             {!!$content!!}
         </ pre >
     </ BODY >
</ HTML >


注意:邮件是通过队列发送的,以减少页面响应速度,实际使用时需要开启队列处理命令。


开启队列处理命令方法:

  1. 直接添加定时命令到 crontab

    1
    crontab  -e
    1
    * * * * * php artisan queue:work 1>>  /dev/null  2>&1   #启动队列监听
  2. 写到框架的 schedule 中,然后通过 schedule 模拟crontab定时处理内部所有命令

    打开 app/Console/Kernel.php 文件在 schedule 函数下添加代码:

    //监听队列

    1
    2
    3
    $schedule ->command( 'queue:work' , $parameters )
         ->everyMinute()
         ->withoutOverlapping();

    然后添加定时命令:

    1
    crontab  -e
    1
    * * * * * php artisan schedule:run 1>>  /dev/null  2>&1    #启动schedule
    本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1919211

相关文章
|
3月前
|
存储 前端开发 JavaScript
javascript 异常问题之为自定义异常提供丰富的上下文信息如何实现
javascript 异常问题之为自定义异常提供丰富的上下文信息如何实现
|
2月前
|
PHP 数据安全/隐私保护 UED
PHP中实现自定义错误处理与异常管理
【9月更文挑战第2天】在PHP开发过程中,错误处理和异常管理是保证应用健壮性的关键。本文将引导你了解如何在PHP中创建自定义错误处理器,并通过实际代码示例展示如何有效捕获和处理异常,确保你的应用程序能够优雅地处理运行时出现的问题。
|
6月前
|
前端开发 程序员
项目中异常是如何处理的
项目中设定了全局异常处理器,统一处理预期和运行时异常。预期异常由程序员手动抛出,用于异常情况的接口返回;运行时异常为不可控错误,提供统一返回格式便于前端提示和后端排查。全局异常处理器借助@RestControllerAdvice和@ExceptionHandler注解,前者标识处理器,后者按异常类型定制前端响应,如预期异常直接返回,运行时异常则调整响应内容。
85 0
|
6月前
|
JSON Java 数据格式
SpringBoot - 错误处理机制与自定义错误处理实现
SpringBoot - 错误处理机制与自定义错误处理实现
48 0
|
监控 前端开发 JavaScript
【前端监控】前端异常捕获与处理
【前端监控】前端异常捕获与处理
282 0
|
存储 安全 PHP
【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理
【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理
124 0
【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理
NestJS 7.x 折腾记: (6) 异常过滤器,取其精华去其糟粕!比如响应异常数据的包装~
正如官方所说: 内置的异常层负责处理整个应用程序中的所有抛出的异常。 当捕获到未处理的异常时,最终用户将收到友好的响应。
433 0
|
JSON 前端开发 Java
springboot 全局异常拦截器,友好异常提示
springboot 全局异常拦截器,友好异常提示
418 0
springboot 全局异常拦截器,友好异常提示
|
监控 前端开发 JavaScript
用Fundebug插件记录网络请求异常
在服务端,不管我们使用Node.js、Java、PHP还是Python等等,都会用日志以文本的形式记录请求以及报错信息。这个对于后端做事后分析是很有用的。 另一方面,前端有时候出问题其实是因为后端接口报错,返回数据异常导致。
1203 0