sentry-laravel是否以同步/阻塞方式发送数据?日志上报会阻塞响应吗?
问题
当发生异常时,Sentry服务器的响应速度无关紧要,但如果是向Sentry上报日志/异常,API客户端是否需要等待日志请求发送完成才会收到应用的响应?观察到Sentry底层使用Guzzle的promises发送请求,但不确定是否会在promise决议后才返回响应。
测试验证
- 修改Sentry的DSN为本地地址,添加模拟Sentry接收请求的路由:
Route::post('/api/envelope', function () { info('sleep'); sleep(10); info('end sleep'); return 'sentry'; })->withoutMiddleware(VerifyCsrfToken::class); - 添加调试路由,触发Sentry异常上报:
Route::get('/debug-sentry', function () { try { throw new \Exception('This is a test exception'); } catch (\Exception $e) { app('sentry')->captureException($e); } return 'Response sent to the client'; }); - 访问
/debug-sentry后的现象:- 请求耗时约5秒
- 控制台抛出超时错误:
SDK: Failed to send the event to Sentry. Reason: "Idle timeout reached for......
结论
测试证明,应用会等待Sentry上报请求的promise完成后才会向客户端返回响应,Sentry的上报过程会直接影响应用的响应性能。
内容的提问来源于stack exchange,提问作者rst630
相关产品推荐
相关产品推荐

