Laravel 高效debug - sentry记录异常上下文信息

码农天地 -
Laravel 高效debug - sentry记录异常上下文信息
前言

在系统的运行过程中,随着用户体量和开发功能的增多的,多多少少会产生一些bug或者异常处理,然而每次在处理这些问题的时候,耗时最长的并不是去解决问题,而是尝试去找到出错的原因,分析到问题的所在,所以我们引入了 Sentry 异常监控日志记录平台,基于Sentry 可以很快的将错误汇总上报到平台上,从而方便开发人员及时发现问题,并作出修复响应。

但是在出错的过程中,有时候错误或者说是bug并不那么容易发现,他只会存在特定的场景或者数据中触发,从而导致我们本地并不能完整重现这个故障。

为了更方便开发人员定位到错误信息,仅凭借错误日志是往往不够的,需要提高更全更完整的上下文信息,如出错的用户信息、用户版本、用户设备、用户操作系统、用户来源等。

记录用户上下文信息

在laravel中可以通过middleware或event来进行上下文信息的填充,这边我选择通过event来进行处理,先快速创建一个监听器。

php artisan make:listener AuthLoginHandler

然后通过sentry scope来填充用户的上下文信息,下面的代码针对用户ID、账号、应用版本、系统版本、设备品牌等进行了填充,可以根据自主项目不太的需求来替换成不同的信息等。

<?php

namespace App\Listeners;

use App\Helpers\AppHelper;
use App\User;
use Sentry\State\Scope;

class AuthLoginHandler
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  object  $event
     * @return void
     */
    public function handle($event)
    {
        $user = $event->user;
        if (!is_null($user)) {
            $this->setSentryUserContext($user);
        }
    }

    public function setSentryUserContext(User $user)
    {
        //收集用户上下文信息 && 触发异常的时候上报到sentry
        \Sentry\configureScope(function (Scope $scope) use ($user): void {
            $scope->setUser([
                'id'      => $user->id,
                'account' => $user->account,
                'version' => AppHelper::version()->getVersion(),
                'store'   => AppHelper::info()->appStore(),
                'os'      => AppHelper::info()->getAppOS(),
                'barnd'   => AppHelper::info()->deviceBrand(),
            ]);
        });

    }
}

注册到EventServiceProvider监听的数组中

protected $listen = [
    'Illuminate\Auth\Events\Login' => [
        'App\Listeners\AuthLoginHandler',
    ],
];
设置Tag(标签)

tag的设置是键值对,可以通过tag来更好的查找和区分

$scope->setTag('小米用户',1);
设置额外的信息

可以用于设置一些额外自定义的信息:如目标服务器的时间、请求参数等。

$scope->setExtra('sign','6XBu5$juld3tF');
运行测试


以上就完成了基本的异常的上下文记录,如果出现一些比较难缠的故障,不确定是数据问题还是逻辑问题的时候就可以通过上下文的用户信息和异常日志来快速定位和重现问题,进行处理了。

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

laravel介绍

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。在Laravel中已经具有了一套高级的PHP ActiveRecord实现 -- Eloquent ORM。它能方便的将“约束(constraints)”应用到关系的双方,这样你就具有了对数

Tags 标签

laravelsentrydebug异常处理php

扩展阅读

加个好友,技术交流

1628738909466805.jpg