如何在 Laravel 中使用 Slack 進(jìn)行異常通知

異常處理是軟件開發(fā)過程中無法逃避的問題。對于一套設(shè)計良好代碼高效的程序,出現(xiàn)異常的可能性會比較低,但這并不意味著不會出現(xiàn)異常,有些異常甚至?xí)饑?yán)重的后果,所以如何及時的發(fā)現(xiàn)程序中的異常并處理它便顯得十分重要了。

推薦:laravel教程

通常,我們可以依靠用戶反饋、經(jīng)常查看程序日志來發(fā)現(xiàn)程序存在的問題。但這要么不可靠要么不及時,所以下面我們介紹一種比較有效的做法–使用 Slack 通知程序跑出的異常信息。

Slack 是一款即時通信軟件,類似于 QQ,它提供開放的 API,可以調(diào)用它向自己團(tuán)隊中指定的個人或者頻道(channel)發(fā)送消息,因此用它來進(jìn)行異常通知是再合適不過的。

1.安裝 maknz/slack-laravel

具體的安裝方法請參考?Github?上的?[readme](https://github.com/maknz/slack-laravel)。

2.配置

安裝完成后使用?php?artisan?vendor:publish?生成?configslack.php 配置文件,然后在.env文件中添加如下三項配置值. ``` SLACK_ENDPOINT=//slack?終端,即?slack?接口地址 SLACK_CHANNEL=//消息默認(rèn)接收頻道 SLACK_USERNAME//消息默認(rèn)接收人 ``` >?當(dāng)然,也可以直接直接在?configslack.php?對應(yīng)配置的默認(rèn)值而不使用?.env,但并不推薦這樣做。 >?根據(jù)實際需要設(shè)置?SLACK_CHANNEL?和?SLACK_USERNAME?,二者并不是必須的

3.調(diào)整 AppExceptionsHandler 類的 report 方法,實現(xiàn) Slack 通知異常信息的邏輯。代碼如下:

/** ?*?Report?or?log?an?exception. ?* ?*?This?is?a?great?spot?to?send?exceptions?to?Sentry,?Bugsnag,?etc. ?* ?*?@param??Exception??$e ?*?@return?void ?*/ public?function?report(Exception?$e) { if?($this->shouldReport($e))?{ ????$slackMessage?=?"n[Error.{$e->getCode()}]?{$e->getMessage()}"; ????$slackMessage.=?"n[Line.{$e->getLine()}]?{$e->getFile()}"; ????$slackMessage.=?"n[Time]?".date('Y-m-d?H:i:s'); ????try?{ ????????Slack::to(config('slack.channel'))->send($slackMessage); ????}?catch?(Exception?$eOther)?{ ????????Log::info($slackMessage); ????} } return?parent::report($e); }

對于一些可能頻繁出現(xiàn)但又不致命的異常,例如404 NotFoundHttpException,我們可能并不想讓程序通知它。為此,我們只需要在 AopExceptionsHandler 類里的 $dontReort 屬性中加入指定的異常的類型就可以了。

????protected?$dontReport?=?[ ????????NotFoundHttpException::class, ????????//?... ????];

示例中展示的是對指定的頻道(channel)發(fā)送信息,當(dāng)然你還可以向指定的人發(fā)送,或者其它更復(fù)雜的用法。不過要注意指定的用戶名和頻道是自己 slack 團(tuán)隊中已經(jīng)存在的,不然會出錯。

這樣,當(dāng)程序中出現(xiàn)異常時,運維能在第一時間收到相關(guān)的通知信息,方便及時處理了。

相關(guān)推薦,PHP視頻教程學(xué)習(xí)地址:laravel教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊11 分享