摘要:中異常處理類主要包含兩個(gè)方法和,其中就是主要用來向第三方發(fā)送異常報(bào)告,這里選擇向這個(gè)神器發(fā)送異常報(bào)告,并使用通知開發(fā)人員。通過也能發(fā)現(xiàn)的執(zhí)行流程。
說明:Laravel學(xué)習(xí)筆記之bootstrap源碼解析中聊異常處理時(shí)提到過Sentry這個(gè)神器,并打算以后聊聊這款神器,本文主要就介紹這款Errors Tracking神器Sentry,Sentry官網(wǎng)有一句話個(gè)人覺得帥呆了:
Stop hoping your users will report errors.
Sentry是一款可用于Production環(huán)境的錯(cuò)誤跟蹤工具,可實(shí)時(shí)通知Production環(huán)境中用戶由于一些不可預(yù)料行為(或者程序?qū)懙挠袉栴})導(dǎo)致程序Crash或Exception,Sentry可以通過Integration如HipChat來發(fā)送通知,并且可以通過JIRA Integration來快速創(chuàng)建Issue,然后開發(fā)者可以根據(jù)這個(gè)Issue快速修復(fù)程序,并把這個(gè)已修復(fù)的Hotfix快速部署到生產(chǎn)環(huán)境,這樣就快速開發(fā)快速修補(bǔ)。天下武功,唯快不破。
本文主要推薦下這款神器,并介紹下它的安裝和配置,有興趣的可以關(guān)注下這款神器。并且這款神器已經(jīng)在我司RightCapital得到長(zhǎng)時(shí)間應(yīng)用了,結(jié)合HipChat和JIRA用起來很順手,值得推薦。
開發(fā)環(huán)境:Laravel5.3 + PHP7
Sentry安裝與配置使用Sentry有兩種方式:Sentry Cloud和Sentry Server。Sentry Cloud就是直接使用Sentry提供的服務(wù),注冊(cè)個(gè)賬號(hào)后然后進(jìn)行設(shè)置就可以使用了,這樣Production Code就會(huì)把Exception這些敏感數(shù)據(jù)發(fā)送到Sentry Cloud,不過公司使用不建議這么做,畢竟這些Exceptions是有很多敏感數(shù)據(jù),而這些數(shù)據(jù)是放在別人家的云服務(wù)器上,誰知道會(huì)發(fā)生什么呢;Sentry Server是Python寫的,可以部署在自己的云服務(wù)器上如AWS或Aliyun,如我司是部署在AWS云上,Sentry官方推薦使用Docker Image來部署。當(dāng)然,不管哪一種方式,使用還是一樣的。就有點(diǎn)像Github/Gitlab、Bitbucket/Bitbucket Server。
這里就介紹下Sentry Cloud如何使用,只有一個(gè)用戶時(shí),Sentry每天免費(fèi)5000 events:
首先是注冊(cè)個(gè)賬號(hào)。這個(gè)去官網(wǎng)注冊(cè)下就OK了。
安裝Sentry包。Sentry提供針對(duì)幾乎每種語言的平臺(tái)Sentry Platform,這里介紹下如何在Laravel程序中集成Sentry。
Sentry for Laravel中介紹了如何集成進(jìn)Laravel,主要就是安裝下Sentry Laravel包:
// 生產(chǎn)環(huán)境也需要這個(gè)包,不需要加 --dev composer require sentry/sentry-laravel "providers" => array( SentrySentryLaravelSentryLaravelServiceProvider::class, ) "aliases" => array( "Sentry" => SentrySentryLaravelSentryFacade::class, ) php artisan vendor:publish --provider="SentrySentryLaravelSentryLaravelServiceProvider"
在自己的程序中安裝好包后,然后在.env配置下SENTRY_DSN。登錄進(jìn)剛剛注冊(cè)的賬號(hào)后,先創(chuàng)建個(gè)Project得到這個(gè)Project的SENTRY_DSN(點(diǎn)擊 New Project):
然后點(diǎn)擊左上角選擇剛剛創(chuàng)建的Project如個(gè)人創(chuàng)建的Sentry/Development,然后點(diǎn)擊左側(cè)欄的Client Keys就行,把DSN值copy出來填入.env文件中(不是DSN Public值),Sentry_DSN結(jié)構(gòu)是:https://{public_key}:{private_key}@sentry.io/{project_id}:
// .env SENTRY_DSN=Your_Sentry_DSN
同時(shí)在Add Integrations,點(diǎn)擊左側(cè)All Integrations選擇HipChat后,然后選擇左側(cè)的HipChat按鈕,選擇Enable Integration,這樣就跳入了HipChat中Integration頁面,同意集成就行,如果沒注冊(cè)HipChat賬號(hào)就注冊(cè)下就行,HipChat是Atlassian旗下的一款免費(fèi)的聊天協(xié)作工具,電腦端手機(jī)端都可以安裝,值得推薦。當(dāng)然,Atlassian全家桶SourceTree(免費(fèi))、JIRA(免費(fèi)/收費(fèi))、Bitbucket(免費(fèi)/收費(fèi))、Confluence(免費(fèi)/收費(fèi))、Bamboo(免費(fèi)/收費(fèi))也都值得推薦。
Laravel中異常處理類AppExceptionsHandler主要包含兩個(gè)方法report()和sender(),其中report()就是主要用來向第三方service發(fā)送異常報(bào)告,這里選擇向Sentry這個(gè)神器發(fā)送異常報(bào)告,并使用HipChat通知開發(fā)人員。這里在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()會(huì)讀取$dontReport[ ]值,查找有哪些Exceptions是不需要Report的,在生產(chǎn)環(huán)境可以都注銷掉,表示用戶產(chǎn)生的所有異常都需要發(fā)送到Sentry中,并通過手機(jī)端HipChat告知開發(fā)者,然后使用Sentry::captureException()捕獲異常。當(dāng)然有時(shí)由于業(yè)務(wù)需求,如根據(jù)不同模塊報(bào)異常level不一樣,需要定制下Sentry類,這里只是簡(jiǎn)單捕獲異常,并默認(rèn)為都是error level。
OK,所有的工作就這么簡(jiǎn)單的完成了。
試一下,如在瀏覽器中輸入一個(gè)不存在的路由如http://sentry.app:8888/sentry,然后報(bào)NotFoundHttpException,查看Sentry有沒有捕獲到:
然后查看HipChat有沒有收到通知:
這里每一次report就是一個(gè)event,Sentry對(duì)于個(gè)人使用是每天免費(fèi)5000 events。
Sentry的Exception Stack內(nèi)容很詳細(xì),很快就能定位bug在哪,而且還捕獲了很多tags,如用戶的device,browser,environment等等有用信息,這些信息都可以用來快速定位bug。通過Exception Stack也能發(fā)現(xiàn)Laravel的執(zhí)行流程。
總結(jié):本文主要介紹一款異常捕獲神器Sentry,值得推薦,具體使用可以深挖Sentry官網(wǎng)文檔和博客,這種提高生產(chǎn)率的神器必須深挖。
我司最近需要一名伙伴一起共同航海去,有興趣速來Profile。
歡迎關(guān)注Laravel-China。
RightCapital招聘Laravel DevOps
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30500.html
摘要:注冊(cè)登錄登錄創(chuàng)建選擇安裝擴(kuò)展使用方法來自配置獲取測(cè)試少寫個(gè)分號(hào)查看效果發(fā)送到對(duì)象當(dāng)方法調(diào)用時(shí)執(zhí)行資源你也可以本地搭建之部署到生產(chǎn)環(huán)境搭建自己的服務(wù)基于安裝自 注冊(cè)登錄 GitHub登錄showImg(https://segmentfault.com/img/bVbgcrL?w=1109&h=554); 創(chuàng)建project 選擇 laravelshowImg(https://segme...
摘要:總結(jié)本文主要學(xué)習(xí)了啟動(dòng)時(shí)做的七步準(zhǔn)備工作環(huán)境檢測(cè)配置加載日志配置異常處理注冊(cè)注冊(cè)啟動(dòng)。 說明:Laravel在把Request通過管道Pipeline送入中間件Middleware和路由Router之前,還做了程序的啟動(dòng)Bootstrap工作,本文主要學(xué)習(xí)相關(guān)源碼,看看Laravel啟動(dòng)程序做了哪些具體工作,并將個(gè)人的研究心得分享出來,希望對(duì)別人有所幫助。Laravel在入口index...
摘要:說明本文主要講述了的文件系統(tǒng)的小,邏輯不復(fù)雜,主要就是把上的一個(gè)文件下載到本地,和下載到中。寫驅(qū)動(dòng)由于沒有驅(qū)動(dòng),需要自定義下在中寫上名為的驅(qū)動(dòng)同時(shí)在注冊(cè)下該就行。執(zhí)行命令后,顯示上文件從上下載到上的文件該邏輯簡(jiǎn)單,但很好玩。 說明:本文主要講述了Laravel的文件系統(tǒng)Filesystem的小Demo,邏輯不復(fù)雜,主要就是把Dropbox上的一個(gè)文件下載到本地local,和下載到AWS...
摘要:實(shí)際上,在中關(guān)閉主要包括兩個(gè)過程保存當(dāng)前到介質(zhì)中在中存入。,學(xué)習(xí)下關(guān)閉的源碼吧先??傊?,關(guān)閉的第二件事就是給添加。通過對(duì)的源碼分析可看出共分為三大步啟動(dòng)操作關(guān)閉??偨Y(jié)本小系列主要學(xué)習(xí)了的源碼,學(xué)習(xí)了的三大步。 說明:在中篇中學(xué)習(xí)了session的CRUD增刪改查操作,本篇主要學(xué)習(xí)關(guān)閉session的相關(guān)源碼。實(shí)際上,在Laravel5.3中關(guān)閉session主要包括兩個(gè)過程:保存當(dāng)前U...
摘要:在登錄后臺(tái)時(shí)也是必須認(rèn)證才行。使用這種總比粗暴的限制訪問來保護(hù)安全要高效的多,一切都是為了自動(dòng)化,為了提高生產(chǎn)率??偨Y(jié)本文主要學(xué)習(xí)使用這個(gè)神器來做,并學(xué)習(xí)了如何使用集成進(jìn)程序中。我司最近需要一名伙伴一起共同航海去,有興趣速來。 說明:本文主要研究利用Duo來實(shí)現(xiàn)雙重認(rèn)證,Two-Factor Authentication就是除了username-password這種登錄認(rèn)證之外,還使用...
閱讀 2649·2021-10-14 09:47
閱讀 4945·2021-09-22 15:52
閱讀 3365·2019-08-30 15:53
閱讀 1461·2019-08-30 15:44
閱讀 691·2019-08-29 16:41
閱讀 1662·2019-08-29 16:28
閱讀 451·2019-08-29 15:23
閱讀 1632·2019-08-26 12:20