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

相关文章
|
12天前
如何处理代理的404错误
如何处理代理的404错误
|
24天前
|
前端开发 程序员
项目中异常是如何处理的
项目中设定了全局异常处理器,统一处理预期和运行时异常。预期异常由程序员手动抛出,用于异常情况的接口返回;运行时异常为不可控错误,提供统一返回格式便于前端提示和后端排查。全局异常处理器借助@RestControllerAdvice和@ExceptionHandler注解,前者标识处理器,后者按异常类型定制前端响应,如预期异常直接返回,运行时异常则调整响应内容。
16 0
|
2月前
|
存储 监控 JavaScript
在 Vue 中如何处理错误和异常情况?
在 Vue 中如何处理错误和异常情况?
31 3
|
7月前
|
Java API Spring
【异常】Feign 调用api模块直接进入fallback的问题解决办法
【异常】Feign 调用api模块直接进入fallback的问题解决办法
105 0
|
5月前
|
前端开发
Nestjs(五)异常处理方式(异常过滤器)
Nestjs(五)异常处理方式(异常过滤器)
60 0
|
5月前
|
JSON Java 数据格式
SpringBoot - 错误处理机制与自定义错误处理实现
SpringBoot - 错误处理机制与自定义错误处理实现
27 0
|
8月前
|
Web App开发 前端开发 JavaScript
如何根据 SAP UI5 框架代码抛出的错误消息,反查出是哪一行代码引起的错误消息试读版
如何根据 SAP UI5 框架代码抛出的错误消息,反查出是哪一行代码引起的错误消息试读版
33 0
|
存储 前端开发 安全
前端401错误 & 解决方法:响应拦截器
前端401错误 & 解决方法:响应拦截器
前端401错误 & 解决方法:响应拦截器
|
存储 安全 PHP
【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理
【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理
102 0
【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理