摘要:中異常處理類主要包含兩個方法和,其中就是主要用來向第三方發送異常報告,這里選擇向這個神器發送異常報告,并使用通知開發人員。通過也能發現的執行流程。
說明:Laravel學習筆記之bootstrap源碼解析中聊異常處理時提到過Sentry這個神器,并打算以后聊聊這款神器,本文主要就介紹這款Errors Tracking神器Sentry,Sentry官網有一句話個人覺得帥呆了:
Stop hoping your users will report errors.
Sentry是一款可用于Production環境的錯誤跟蹤工具,可實時通知Production環境中用戶由于一些不可預料行為(或者程序寫的有問題)導致程序Crash或Exception,Sentry可以通過Integration如HipChat來發送通知,并且可以通過JIRA Integration來快速創建Issue,然后開發者可以根據這個Issue快速修復程序,并把這個已修復的Hotfix快速部署到生產環境,這樣就快速開發快速修補。天下武功,唯快不破。
本文主要推薦下這款神器,并介紹下它的安裝和配置,有興趣的可以關注下這款神器。并且這款神器已經在我司RightCapital得到長時間應用了,結合HipChat和JIRA用起來很順手,值得推薦。
開發環境:Laravel5.3 + PHP7
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:
首先是注冊個賬號。這個去官網注冊下就OK了。
安裝Sentry包。Sentry提供針對幾乎每種語言的平臺Sentry Platform,這里介紹下如何在Laravel程序中集成Sentry。
Sentry for Laravel中介紹了如何集成進Laravel,主要就是安裝下Sentry Laravel包:
// 生產環境也需要這個包,不需要加 --dev composer require sentry/sentry-laravel "providers" => array( SentrySentryLaravelSentryLaravelServiceProvider::class, ) "aliases" => array( "Sentry" => SentrySentryLaravelSentryFacade::class, ) php artisan vendor:publish --provider="SentrySentryLaravelSentryLaravelServiceProvider"
在自己的程序中安裝好包后,然后在.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中異常處理類AppExceptionsHandler主要包含兩個方法report()和sender(),其中report()就是主要用來向第三方service發送異常報告,這里選擇向Sentry這個神器發送異常報告,并使用HipChat通知開發人員。這里在report()寫上代碼:
/** * A list of the exception types that should not be reported. * * @var array */ protected $dontReport = [ // IlluminateAuthAuthenticationException::class, // IlluminateAuthAccessAuthorizationException::class, // SymfonyComponentHttpKernelExceptionHttpException::class, // IlluminateDatabaseEloquentModelNotFoundException::class, // IlluminateSessionTokenMismatchException::class, // IlluminateValidationValidationException::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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30500.html
摘要:注冊登錄登錄創建選擇安裝擴展使用方法來自配置獲取測試少寫個分號查看效果發送到對象當方法調用時執行資源你也可以本地搭建之部署到生產環境搭建自己的服務基于安裝自 注冊登錄 GitHub登錄showImg(https://segmentfault.com/img/bVbgcrL?w=1109&h=554); 創建project 選擇 laravelshowImg(https://segme...
摘要:總結本文主要學習了啟動時做的七步準備工作環境檢測配置加載日志配置異常處理注冊注冊啟動。 說明:Laravel在把Request通過管道Pipeline送入中間件Middleware和路由Router之前,還做了程序的啟動Bootstrap工作,本文主要學習相關源碼,看看Laravel啟動程序做了哪些具體工作,并將個人的研究心得分享出來,希望對別人有所幫助。Laravel在入口index...
摘要:說明本文主要講述了的文件系統的小,邏輯不復雜,主要就是把上的一個文件下載到本地,和下載到中。寫驅動由于沒有驅動,需要自定義下在中寫上名為的驅動同時在注冊下該就行。執行命令后,顯示上文件從上下載到上的文件該邏輯簡單,但很好玩。 說明:本文主要講述了Laravel的文件系統Filesystem的小Demo,邏輯不復雜,主要就是把Dropbox上的一個文件下載到本地local,和下載到AWS...
摘要:實際上,在中關閉主要包括兩個過程保存當前到介質中在中存入。,學習下關閉的源碼吧先。總之,關閉的第二件事就是給添加。通過對的源碼分析可看出共分為三大步啟動操作關閉。總結本小系列主要學習了的源碼,學習了的三大步。 說明:在中篇中學習了session的CRUD增刪改查操作,本篇主要學習關閉session的相關源碼。實際上,在Laravel5.3中關閉session主要包括兩個過程:保存當前U...
摘要:在登錄后臺時也是必須認證才行。使用這種總比粗暴的限制訪問來保護安全要高效的多,一切都是為了自動化,為了提高生產率。總結本文主要學習使用這個神器來做,并學習了如何使用集成進程序中。我司最近需要一名伙伴一起共同航海去,有興趣速來。 說明:本文主要研究利用Duo來實現雙重認證,Two-Factor Authentication就是除了username-password這種登錄認證之外,還使用...
閱讀 2641·2021-10-14 09:47
閱讀 4934·2021-09-22 15:52
閱讀 3359·2019-08-30 15:53
閱讀 1454·2019-08-30 15:44
閱讀 678·2019-08-29 16:41
閱讀 1655·2019-08-29 16:28
閱讀 443·2019-08-29 15:23
閱讀 1627·2019-08-26 12:20