Laravel學習筆記之Errors Tracking神器——Sentry

說明:Laravel學習筆記之bootstrap源碼解析中聊異常處理時提到過Sentry這個神器,並打算之後聊聊這款神器,本文主要就介紹這款Errors Tracking神器SentrySentry官網有一句話我的以爲帥呆了:php

Stop hoping your users will report errors.laravel

Sentry是一款可用於Production環境的錯誤跟蹤工具,可實時通知Production環境中用戶因爲一些不可預料行爲(或者程序寫的有問題)致使程序Crash或Exception,Sentry能夠經過Integration如HipChat來發送通知,而且能夠經過JIRA Integration來快速建立Issue,而後開發者能夠根據這個Issue快速修復程序,並把這個已修復的Hotfix快速部署到生產環境,這樣就快速開發快速修補。天下武功,惟快不破。bootstrap

本文主要推薦下這款神器,並介紹下它的安裝和配置,有興趣的能夠關注下這款神器。而且這款神器已經在我司RightCapital獲得長時間應用了,結合HipChat和JIRA用起來很順手,值得推薦。segmentfault

開發環境:Laravel5.3 + PHP7api

Sentry安裝與配置

使用Sentry有兩種方式:Sentry Cloud和Sentry Server。Sentry Cloud就是直接使用Sentry提供的服務,註冊個帳號後而後進行設置就可使用了,這樣Production Code就會把Exception這些敏感數據發送到Sentry Cloud,不過公司使用不建議這麼作,畢竟這些Exceptions是有不少敏感數據,而這些數據是放在別人家的雲服務器上,誰知道會發生什麼呢;Sentry Server是Python寫的,能夠部署在本身的雲服務器上如AWS或Aliyun,如我司是部署在AWS雲上,Sentry官方推薦使用Docker Image來部署。固然,無論哪種方式,使用仍是同樣的。就有點像Github/Gitlab、Bitbucket/Bitbucket Server。瀏覽器

這裏就介紹下Sentry Cloud如何使用,只有一個用戶時,Sentry天天免費5000 events:服務器

  1. 首先是註冊個帳號。這個去官網註冊下就OK了。app

  2. 安裝Sentry包。Sentry提供針對幾乎每種語言的平臺Sentry Platform,這裏介紹下如何在Laravel程序中集成Sentry。composer

Sentry for Laravel中介紹瞭如何集成進Laravel,主要就是安裝下Sentry Laravel包:ide

// 生產環境也須要這個包,不須要加 --dev
composer require sentry/sentry-laravel

'providers' => array(
    Sentry\SentryLaravel\SentryLaravelServiceProvider::class,
)

'aliases' => array(
    'Sentry' => Sentry\SentryLaravel\SentryFacade::class,
)

php artisan vendor:publish --provider="Sentry\SentryLaravel\SentryLaravelServiceProvider"

在本身的程序中安裝好包後,而後在.env配置下SENTRY_DSN。登陸進剛剛註冊的帳號後,先建立個Project獲得這個Project的SENTRY_DSN(點擊 New Project):

圖片描述

而後點擊左上角選擇剛剛建立的Project如我的建立的Sentry/Development,而後點擊左側欄的Client Keys就行,把DSN值copy出來填入.env文件中(不是DSN Public值),Sentry_DSN結構是:https://{public_key}:{private_key}@sentry.io/{project_id}

// .env
SENTRY_DSN=Your_Sentry_DSN

圖片描述

同時在Add Integrations,點擊左側All Integrations選擇HipChat後,而後選擇左側的HipChat按鈕,選擇Enable Integration,這樣就跳入了HipChat中Integration頁面,贊成集成就行,若是沒註冊HipChat帳號就註冊下就行,HipChat是Atlassian旗下的一款免費的聊天協做工具,電腦端手機端均可以安裝,值得推薦。固然,Atlassian全家桶SourceTree(免費)、JIRA(免費/收費)、Bitbucket(免費/收費)、Confluence(免費/收費)、Bamboo(免費/收費)也都值得推薦。

Laravel中異常處理類\App\Exceptions\Handler主要包含兩個方法report()sender(),其中report()就是主要用來向第三方service發送異常報告,這裏選擇向Sentry這個神器發送異常報告,並使用HipChat通知開發人員。這裏在report()寫上代碼:

/**
     * A list of the exception types that should not be reported.
     *
     * @var array
     */
    protected $dontReport = [
//        \Illuminate\Auth\AuthenticationException::class,
//        \Illuminate\Auth\Access\AuthorizationException::class,
//        \Symfony\Component\HttpKernel\Exception\HttpException::class,
//        \Illuminate\Database\Eloquent\ModelNotFoundException::class,
//        \Illuminate\Session\TokenMismatchException::class,
//        \Illuminate\Validation\ValidationException::class,
    ];

    /**
     * Report or log an exception.
     *
     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        // If the exception is instanceOf $dontReport, do not report it.
        if ($this->shouldntReport($exception)) {
            return;
        }

        // Send exception to Sentry if it is set.
        if (env('SENTRY_DSN')) {
            Sentry::captureException($exception);
        } else {
            // Log the exception if the Sentry is not set.
            parent::report($exception);
        }
    }

shouldntReport()會讀取$dontReport[ ]值,查找有哪些Exceptions是不須要Report的,在生產環境能夠都註銷掉,表示用戶產生的全部異常都須要發送到Sentry中,並經過手機端HipChat告知開發者,而後使用Sentry::captureException()捕獲異常。固然有時因爲業務需求,如根據不一樣模塊報異常level不同,須要定製下Sentry類,這裏只是簡單捕獲異常,並默認爲都是error level

OK,全部的工做就這麼簡單的完成了。

試一下,如在瀏覽器中輸入一個不存在的路由如http://sentry.app:8888/sentry,而後報NotFoundHttpException,查看Sentry有沒有捕獲到:

圖片描述

圖片描述

而後查看HipChat有沒有收到通知:

圖片描述

這裏每一次report就是一個event,Sentry對於我的使用是天天免費5000 events。

Sentry的Exception Stack內容很詳細,很快就能定位bug在哪,並且還捕獲了不少tags,如用戶的device,browser,environment等等有用信息,這些信息均可以用來快速定位bug。經過Exception Stack也能發現Laravel的執行流程。

總結:本文主要介紹一款異常捕獲神器Sentry,值得推薦,具體使用能夠深挖Sentry官網文檔和博客,這種提升生產率的神器必須深挖。
我司最近須要一名夥伴一塊兒共同航海去,有興趣速來Profile

歡迎關注Laravel-China

RightCapital招聘Laravel DevOps

相關文章
相關標籤/搜索