应根据框架和日志系统选择对应包:Laravel 5.6+ 用 sentry/sentry-laravel,Symfony/Slim/纯 PHP 用 sentry/sentry 并手动注册,已有 Monolog 的项目补装 monolog-sentry-handler 桥接。

直接用 composer require 就能装好 Sentry PHP SDK,但默认不带日志通道集成,告警收不到 Laravel 或 Monolog 的日志——得手动配 sentry/sentry-laravel 或桥接 monolog-sentry-handler。
装哪个包?看框架和日志系统
别直接 composer require sentry/sentry,那是纯底层 SDK,没自动捕获、没日志绑定。实际项目要分情况:
- Laravel 5.6+:优先用
composer require sentry/sentry-laravel,它自带异常拦截 + 日志通道 + Artisan 命令 - Symfony / Slim / 纯 PHP:用
composer require sentry/sentry+ 手动注册错误处理器 - 已有 Monolog(比如 CodeIgniter、ThinkPHP):补装
composer require monolog/monolog sentry/sentry,再加monolog-sentry-handler桥接器
配置 DSN 和环境时最容易漏的三件事
SENTRY_DSN 不只是贴链接就完事,环境变量、初始化时机、上下文隔离都影响上报效果:
- DSN 必须设在
.env里(Laravel)或启动早期(如index.php开头),不能等路由加载完才 init - 不同环境要用不同
environment字段,否则测试服错误混进生产看板:SENTRY_ENVIRONMENT=production
- 若用队列或 CLI 命令,需单独调用
Sentry\init(),否则后台任务的异常不上报
Laravel 日志告警失效?检查 Handler 是否被覆盖
装了 sentry/sentry-laravel 后,storage/logs/laravel.log 里的错误仍不触发 Sentry 告警,大概率是日志通道没走 Sentry Handler:
- 确认
config/logging.php中stack或single通道里包含sentry:'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'sentry'], ], 'sentry' => [ 'driver' => 'sentry', ], ] - 如果自定义了
Monolog\Handler\StreamHandler并直接 new 实例,会绕过 Laravel 的 Sentry Handler,必须用tap或改用createLogger - 调试技巧:临时在
App\Exceptions\Handler::report()里加\Sentry\captureException($exception),验证 DSN 是否有效
真正卡住人的不是安装命令,而是 DSN 初始化太晚、日志通道没挂载、CLI 环境没重 init —— 这三处一错,看着装好了,其实一条告警都不会发出去。










