应直接安装sentry/sentry-laravel,因其内置Service Provider、异常处理器及锁定兼容的SDK v3.x;手动安装sentry/sentry易引入不兼容的v4.x,导致HubInterface找不到、上报失效。

为什么装了 sentry/sentry 还报 Class 'Sentry\State\HubInterface' not found
因为 sentry/sentry 是纯 SDK,而 Laravel 项目必须用 sentry/sentry-laravel——后者已锁定兼容的 sentry/sdk v3.x 版本。手动先装 sentry/sentry,Composer 可能拉来 v4.x,其类结构已变更:HubInterface 被移至新命名空间或彻底弃用,导致运行时报错、php artisan sentry:test 失败、异常捕获静默失效。
- 别执行
composer require sentry/sentry,哪怕文档里写了“PHP SDK” - 只执行
composer require sentry/sentry-laravel,一步到位 - 装完立刻运行
php artisan vendor:publish --provider="Sentry\Laravel\SentryServiceProvider",确保配置落地(Laravel 9+ 自动发现 ≠ 配置已写入)
php artisan sentry:test 没反应?检查这三处硬性条件
这个命令不是“发一条测试事件”,而是走完整上报链路,但会提前短路:只要不满足任一条件,就直接 return,不发请求、不报错、也不提示。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
APP_DEBUG=true且SENTRY_LARAVEL_DSN在.env中非空——漏掉https://前缀或认证段(如@o123.ingest.sentry.io/456)会导致初始化跳过 - 若用 Laravel Octane,需在
config/sentry.php中显式设'send_default_pii' => false,并执行php artisan octane:reload(旧配置会被进程缓存) - 防火墙或网络限制可能让请求超时;可临时在
routes/web.php加两行验证:Sentry\init(['dsn' => env('SENTRY_LARAVEL_DSN')]); \Sentry\captureException(new \Exception('test'));,看是否进后台
Laravel 日志告警不上报?大概率是 logging.php 没挂载 sentry channel
装了 sentry/sentry-laravel 不等于日志自动走 Sentry。Laravel 的日志通道是显式配置的,如果没把 sentry 加进 stack 或主通道,Log::error() 就只写文件,不触发上报。
- 确认
config/logging.php中存在'sentry' => ['driver' => 'sentry']配置项 - 确保
'channels' => ['single', 'sentry']出现在stack的channels数组里(顺序无关) - 避免在代码里直接 new
Monolog\Handler\StreamHandler——这会绕过 Laravel 的 Channel 管理,Sentry Handler 完全不生效 - 调试时可在
App\Exceptions\Handler::report()里加一行\Sentry\captureException($exception),快速验证 DSN 是否有效
升级 sentry/sentry-laravel 到 3.x 后异常捕获失效?删掉所有手动 Sentry\init()
新版 sentry/sentry-laravel 3.x 已接管全部初始化逻辑,强制绑定 sentry/sdk v3.x。如果你还保留旧版手动调用 Sentry\init(),会导致 Hub 实例冲突、重复注册、甚至覆盖 Laravel Service Provider 的配置。
- 全局搜索项目中所有
Sentry\init(,全部删除 -
config/sentry.php中traces_sample_rate默认为null,性能监控不会开启——要启用必须显式设为1.0或其他数值 - 老 DSN(v1/v2 格式)不再兼容,新项目必须用
https://xxx@o123.ingest.sentry.io/456这种 v3 格式 - 队列任务、Artisan 命令等 CLI 场景默认不继承 Web 环境的 Sentry 初始化,需在命令入口或队列 worker 启动时单独调用
Sentry\init()(仅限 CLI)

















