当前位置: 首页 > 后端技术 > PHP

Laravel高效调试——哨兵记录异常上下文信息

时间:2023-03-30 00:31:30 PHP

前言在系统运行过程中,随着用户数量和开发功能的增多,或多或少会出现一些bug或者异常处理,但是每次处理这些问题都在当时,花费时间最长的不是解决问题,而是试图找出错误原因并分析问题,所以我们引入了Sentry异常监控和日志平台,基于Sentry,可以快速发现错误汇总并上报给平台,以便开发者及时发现问题并做出修复响应。但是在出错的过程中,有时候错误或者BUG并不是那么容易发现的,只有在特定的场景或者数据中才会触发,所以我们无法在本地完全复现故障。为了让开发者更容易定位错误信息,仅仅依靠错误日志往往是不够的。有必要提供更完整完整的上下文信息,如发生错误的用户信息、用户版本、用户设备、用户操作系统、用户来源等。记录用户上下文信息在laravel中,上下文信息可以通过中间件或者事件来填充。这里我选择通过事件来处理,首先快速创建一个监听器。phpartisanmake:listenerAuthLoginHandler然后使用sentry作用域来填充用户的上下文信息。以下代码填写用户ID、账号、应用版本、系统版本、设备品牌等,可替换为不同的信息等。user;如果(!is_null($user)){$this->setSentryUserContext($user);}}publicfunctionsetSentryUserContext(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(label)tag的设置是一个键值对,可以用来更好的查找和区分$scope->setTag('小米用户',1);Settingadditionalinformation可以用来设置一些额外的自定义信息:比如目标服务器的时间,请求参数等。$scope->setExtra('sign','6XBu5$juld3tF');运行测试后,基本的异常上下文记录就完成了。如果出现一些疑难故障,不确定是数据问题还是逻辑问题,可以通过上下文用户信息和异常日志快速定位并重置。问题已经解决。