laravel5异常及时通知
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel5异常及时通知相关的知识,希望对你有一定的参考价值。
项目上线后,都会使用一些异常监控,当然很多时候监控是有限制的,比如要监控php异常,类似这种一般都在输出人性化内容而不是直接输出错误内容,很多时候需要捕捉这类异常来进行代码调整。当然也可以定期去查看日志。
laravel5支持自定义异常处理,给这种需求提供了方便,我们完全可以扩展异常处理,通过发送邮件或短信。
打开 app/Exceptions/Handler.php 文件,修改 render 函数代码,增加发送邮件通知功能:
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(‘[email protected]‘) ->cc(‘[email protected]‘) ->subject(‘程序异常‘); });
原来的
return parent::render($request, $e);
是返回异常内容或403页面的,如果想页面返回更友好,可以去掉这个代码改成其它内容返回,可直接使用如形式的代码:
return response(‘服务器累了,稍后再试!‘);
邮件模板:
<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}} <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>
注意:邮件是通过队列发送的,以减少页面响应速度,实际使用时需要开启队列处理命令。
开启队列处理命令方法:
直接添加定时命令到 crontab
crontab -e
* * * * * php artisan queue:work 1>> /dev/null 2>&1 #启动队列监听
写到框架的 schedule 中,然后通过 schedule 模拟crontab定时处理内部所有命令
打开 app/Console/Kernel.php 文件在 schedule 函数下添加代码:
//监听队列
$schedule->command(‘queue:work‘,$parameters) ->everyMinute() ->withoutOverlapping();
然后添加定时命令:
crontab -e
* * * * * php artisan schedule:run 1>> /dev/null 2>&1 #启动schedule
本文出自 “秋风扫落叶” 博客,请务必保留此出处http://php2012web.blog.51cto.com/5585213/1919211
以上是关于laravel5异常及时通知的主要内容,如果未能解决你的问题,请参考以下文章
如何在不与 MainActivity 交互的情况下从通知中打开片段页面?