资讯专栏INFORMATION COLUMN

Laravel学习笔记之Errors Tracking神器——Sentry

xiguadada / 1942人阅读

摘要:中异常处理类主要包含两个方法和,其中就是主要用来向第三方发送异常报告,这里选择向这个神器发送异常报告,并使用通知开发人员。通过也能发现的执行流程。

说明: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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30500.html

相关文章

  • laravel sentry

    摘要:注册登录登录创建选择安装扩展使用方法来自配置获取测试少写个分号查看效果发送到对象当方法调用时执行资源你也可以本地搭建之部署到生产环境搭建自己的服务基于安装自 注册登录 GitHub登录showImg(https://segmentfault.com/img/bVbgcrL?w=1109&h=554); 创建project 选择 laravelshowImg(https://segme...

    tinysun1234 评论0 收藏0
  • Laravel学习笔记bootstrap源码解析

    摘要:总结本文主要学习了启动时做的七步准备工作环境检测配置加载日志配置异常处理注册注册启动。 说明:Laravel在把Request通过管道Pipeline送入中间件Middleware和路由Router之前,还做了程序的启动Bootstrap工作,本文主要学习相关源码,看看Laravel启动程序做了哪些具体工作,并将个人的研究心得分享出来,希望对别人有所帮助。Laravel在入口index...

    xiaoxiaozi 评论0 收藏0
  • Laravel学习笔记Filesystem-从Dropbox中下载文件到AWS S3

    摘要:说明本文主要讲述了的文件系统的小,逻辑不复杂,主要就是把上的一个文件下载到本地,和下载到中。写驱动由于没有驱动,需要自定义下在中写上名为的驱动同时在注册下该就行。执行命令后,显示上文件从上下载到上的文件该逻辑简单,但很好玩。 说明:本文主要讲述了Laravel的文件系统Filesystem的小Demo,逻辑不复杂,主要就是把Dropbox上的一个文件下载到本地local,和下载到AWS...

    tylin 评论0 收藏0
  • Laravel学习笔记Session源码解析(下)

    摘要:实际上,在中关闭主要包括两个过程保存当前到介质中在中存入。,学习下关闭的源码吧先。总之,关闭的第二件事就是给添加。通过对的源码分析可看出共分为三大步启动操作关闭。总结本小系列主要学习了的源码,学习了的三大步。 说明:在中篇中学习了session的CRUD增删改查操作,本篇主要学习关闭session的相关源码。实际上,在Laravel5.3中关闭session主要包括两个过程:保存当前U...

    Awbeci 评论0 收藏0
  • Laravel学习笔记Two-Factor Authentication神器——Duo

    摘要:在登录后台时也是必须认证才行。使用这种总比粗暴的限制访问来保护安全要高效的多,一切都是为了自动化,为了提高生产率。总结本文主要学习使用这个神器来做,并学习了如何使用集成进程序中。我司最近需要一名伙伴一起共同航海去,有兴趣速来。 说明:本文主要研究利用Duo来实现双重认证,Two-Factor Authentication就是除了username-password这种登录认证之外,还使用...

    hoohack 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<