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

相关文章
|
4月前
|
前端开发 开发工具 git
大事件项目15----axios响应拦截器,统一判断401做被动退出
大事件项目15----axios响应拦截器,统一判断401做被动退出
|
5月前
|
前端开发
如何处理前端应用程序中的异步操作
前端异步操作常见方法包括回调函数、Promise 和 async/await。回调函数可能导致回调地狱,Promise 提供了更好的错误处理和链式调用,而 async/await 则基于 Promise,以同步风格处理异步任务,提高代码可读性。根据需求和喜好选择相应方法,以实现更可靠、易维护的代码。
|
5月前
如何处理代理的404错误
如何处理代理的404错误
225 8
|
5月前
|
程序员
项目中的全局异常是如何处理的
项目中的全局异常处理通常包括对预期异常(程序员手动抛出)和运行时异常的管理。项目已提供`BaseException`作为基础异常类,用于手动抛出异常,并通过`GlobalExceptionHandler`进行全局处理。`
50 4
|
5月前
|
前端开发 程序员
项目中异常是如何处理的
项目中设定了全局异常处理器,统一处理预期和运行时异常。预期异常由程序员手动抛出,用于异常情况的接口返回;运行时异常为不可控错误,提供统一返回格式便于前端提示和后端排查。全局异常处理器借助@RestControllerAdvice和@ExceptionHandler注解,前者标识处理器,后者按异常类型定制前端响应,如预期异常直接返回,运行时异常则调整响应内容。
71 0
|
5月前
|
JSON Java 数据格式
SpringBoot - 错误处理机制与自定义错误处理实现
SpringBoot - 错误处理机制与自定义错误处理实现
43 0
|
Web App开发 前端开发 JavaScript
如何根据 SAP UI5 框架代码抛出的错误消息,反查出是哪一行代码引起的错误消息试读版
如何根据 SAP UI5 框架代码抛出的错误消息,反查出是哪一行代码引起的错误消息试读版
|
消息中间件 存储 JavaScript
Electron开发自定义通知 & 多并发下接收消息处理
Electron 专门提供了 Notification 可以用来实现`系统通知`,但是如果想实现自定义(如自定义UI样式等)通知,Notification 则不能实现。 下面摘录了我在`系统通知`和如何实现`自定义通知`的思路,另外也阐述了`多并发下接收消息`方案实现。
610 0
|
监控 前端开发 JavaScript
【前端监控】前端异常捕获与处理
【前端监控】前端异常捕获与处理
266 0
|
存储 前端开发 安全
前端401错误 & 解决方法:响应拦截器
前端401错误 & 解决方法:响应拦截器
前端401错误 & 解决方法:响应拦截器