Laravel 拥有非常好的异常处理机制,所有的异常都会经过 App\Exceptions\Handlerreport 方法进行处理( 查看详情 )。

然而我所见过大部分公司或者组织,都没有很好的查看日志习惯,以至于有可能有一堆错误日志或者影响用户体验的地方却没有发现。

你可以选择邮件通知你的网站异常

public function report(Exception $exception)
{
    // 你也可以选择短信通知,土豪随意
    Sms::send($phone, [$exception]);
    // 比较传统的通知方式
    Mail::to($request->user())->send(new ExceptionNotify($exception));
    return parent::report($exception);
}

在这里大概讲讲通过微信公众号通知,如果你有已认证的微信服务号,那就方便多了,如果没有,可以0成本的去申请一个微信测试号。 点我直接申请

下面微信包使用的是超哥的 EasyWechat , 可以自行了解。

假若你的应用已经依赖了的 EasyWechat, 那就好办多了

public function report(Exception $exception)
{
    app('wechat')->notice->to($userOpenId)->uses($templateId)->andUrl($url)->data($data)->send();
    return parent::report($exception);
}

假若原本没有依赖 EasyWechat , 你可以选择引入 wechat-notice

compooser require hanson/wechat-notice

添加 Hanson\WechatNotice\NoticeServiceProvider::classapp.phpproviders

在这里有三种使用方式

姿势一

在你的 config/services.php 中定义一个数组 wechat

return [
    // ...
    'wechat' => [
        'app_id' => 'your app id',
        'secret' => 'your secret'
    ]
]
public function report(Exception $exception)
{
    \WechatNotice::send($openId, $templateId, [
        'first' => '系统异常',
        'keyword1' => get_class($this),
        'keyword2' => url()->current(),
        'keyword2' => $_SERVER['REMOTE_ADDR'],
        'remark' => '请及时处理'
    ]);
}

姿势二

传一个已有的 wechat 实例

public function report(Exception $exception)
{
    $wechat = new Application(['app_id' => '', 'secret' => '']);
    \WechatNotice::setWechat($wechat)->send($openId, $templateId, [
        'first' => '系统异常',
        'keyword1' => get_class($this),
        'keyword2' => url()->current(),
        'keyword2' => $_SERVER['REMOTE_ADDR'],
        'remark' => '请及时处理'
    ]);
}

姿势三

传微信参数进去

public function report(Exception $exception)
{
    \WechatNotice::setConfig(['app_id' => '', 'secret' => ''])->send($openId, $templateId, [
        'first' => '系统异常',
        'keyword1' => get_class($this),
        'keyword2' => url()->current(),
        'keyword2' => $_SERVER['REMOTE_ADDR'],
        'remark' => '请及时处理'
    ]);
}

当然你也可以传 openids 数组进去方便通知多人

\WechatNotice::send([$openid1, $openid2], $templateId, $data, $url);

如果你玩的溜,可以把你的账号绑定授权,点击消息模板然后显示当前错误的报错信息,这样总比登录服务器找一堆报错日志好吧 :)