例外處理是軟體開發程序中無法逃避的問題,對于一套設計良好代碼高效的程式,出現例外的可能性會比較低,但這并不意味著不會出現例外,有些例外甚至會引起嚴重的后果,所以如何及時的發現程式中的例外并處理它便顯得十分重要了,
通常,我們可以依靠用戶反饋、經常查看程式日志來發現程式存在的問題,但這要么不可靠要么不及時,所以下面我們介紹一種比較有效的做法--使用 Slack 通知程式跑出的例外資訊,
Slack 是一款即時通信軟體,類似于 QQ,它提供開放的 API,可以呼叫它向自己團隊中指定的個人或者頻道(Channel)發送訊息,因此用它來進行例外通知是再合適不過的,
1.安裝 maknz/slack-laravel 包
具體的安裝方法請參考 Github 上的 [readme](https://github.com/maknz/slack-laravel),
2.配置
安裝完成后使用 php artisan vendor:publish 生成 config\slack.php 組態檔,然后在.env檔案中添加如下三項配置值. ``` SLACK_ENDPOINT=//slack 終端,即 slack 介面地址 SLACK_CHANNEL=//訊息默認接收頻道 SLACK_USERNAME//訊息默認接收人 ``` > 當然,也可以直接直接在 config\slack.php 對應配置的默認值而不使用 .env,但并不推薦這樣做, > 根據實際需要設定 SLACK_CHANNEL 和 SLACK_USERNAME ,二者并不是必須的
3.調整 AppExceptionsHandler 類的 report 方法,實作 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);
}
對于一些可能頻繁出現但又不致命的例外,例如404 NotFoundHttpException,我們可能并不想讓程式通知它,為此,我們只需要在 Aop\Exceptions\Handler 類里的 $dontReort 屬性中加入指定的例外的型別就可以了,
protected $dontReport = [
NotFoundHttpException::class,
// ...
];
示例中展示的是對指定的頻道(channel)發送資訊,當然你還可以向指定的人發送,或者其它更復雜的用法,不過要注意指定的用戶名和頻道是自己 slack 團隊中已經存在的,不然會出錯,
這樣,當程式中出現例外時,運維能在第一時間收到相關的通知資訊,方便及時處理了,
以上就是如何在 Laravel 中使用 Slack 進行例外通知的詳細內容
更多學習內容請訪問:
怎么從一名碼農成為架構師的必看知識點:目錄大全(不定期更新)?zhuanlan.zhihu.com
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/75621.html
標籤:PHP
上一篇:使用什么除錯swoole程式
