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}} &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

    crontab -e
    * * * * * php artisan queue:work 1>> /dev/null 2>&1  #启动队列监听
  2. 写到框架的 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
时间: 2024-10-10 05:59:16

laravel5异常及时通知的相关文章

pyton 编写脚本检测两台主机之间的通信状态,异常邮件通知

最近客户有一个需求要检测两台服务器之间的通信状态.要是通信是失败就需要邮件通知相关人.本来想用shell来实现,shell脚本ping 对端服务器很简单,但是shell的邮件发送比较麻烦,于是使用python实现并且用smtplib模块可以快速实现邮件的发送. 功能如下:1秒钟ping一次目标地址.代码中把你的邮箱改为自己的就可以, 代码: #coding:utf-8 import socket import smtplib import email.MIMEText import email.

Python常用异常及处理方法

Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions):本站Python教程会具体介绍. python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIter

java31:异常

java 异常处理机制 Throwable 类 异常的顶级类 子类 Error  :系统级别的错误 栈内存溢出 Exception:程序级别的错误 可以通过捕获机制类解决 try 语句 try{ 可能出现异常的代码片段 } try{}这个是发现问题的语句 catch 语句 catch(Exception_Type e){ 解决问题的代码片段 } catch语句是用来捕获try语句中出现 并针对该异常解决,catch语句块可以出现多次 捕获异常:应该在最后一个catch 中加入Exception

初识Python(8)__Python错误和异常

错误和异常 ################################################################################## 参考:http://blog.csdn.net/fcoolx/article/details/4202872 http://blog.163.com/[email protected]/blog/static/279729562008719384580/ https://docs.python.org/2/library

python之-- 异常

异常处理: 语法:try: codeexcept (KeyError..可以写多个) as e: error为抓取的多个错误提示,e为错误信息 print(e) # 打印错误信息except (IndexError) as e: print(e)except Exception as e: # 上面方法无法捕捉到的错误,在这里统统捕获 print('未知错误 ',e)else: # 当没有出现错误,则执行这里 print('一切正常')finally: print('不管有没有错误,都会执行这里

python 异常

引用一段来自菜鸟教程的文章:http://www.runoob.com/python/python-exceptions.html Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions):本站Python教程会具体介绍. python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释

第一节:定义异常

设计类型时,首先要想好类型的各种使用情况.类型名称通常是一个名词,例如FileStream或者StringBuilder.然后,要为类型定义属性.方法.事件等.这些成员的定义方式就是类型的编程接口.这些成员代表类本身或者类型实例可以执行的动作.行动成员通常用动词表示,例如Read,Write,Flush,Append,Insert和Remove等.当行动成员不能完成任务时,就应抛出异常. 重要提示:异常时指成员没有完成它的名称宣称可以完成的行动. 看一看下面类定义: class Account

中断 异常

8086/8088把中断分为内部中断和外部中断两大类. 为了支持多任务和虚拟存储器等功能,80386把外部中断称为“中断”,把内部中断称为“异常”. 与8086/8088一样,80386通常在两条指令之间响应中断或异常. 80386最多处理256种中断或异常. 1.中断 对80386而言,中断是由异步的外部事件引起的. 外部事件及中断响应与正执行 的指令没有关系. 通常,中断用于指示I/O设备的一次操作已完成. 与8086/8088一样,80386有两根引脚INTR和NMI接受外部中断请求信号.

异常以及异常处理框架探析

概述 一般情况下,企业级应用都对应着复杂的业务逻辑,为了保证系统的健壮,必然需要面对各种系统业务异常和运行时异常. 不好的异常处理方式容易造成应用程序逻辑混乱,脆弱而难于管理.应用程序中充斥着零散的异常处理代码,使程序代码晦涩难懂.可读性差,并且难于维护. 一个好的异常处理框架能为应用程序的异常处理提供统一的处理视图,把异常处理从程序正常运行逻辑分离出来,以至于提供更加结构化以及可读性的程序架构.另外,一个好的异常处理框架具备可扩展性,很容易根据具体的异常处理需求,扩展出特定的异常处理逻辑. 另