sentry能集成但默认仅捕获未处理异常和php错误;translation缺失、pdo被catch异常、http超时等需手动配置集成或监听事件,dsn配置失效多因环境变量未正确注入或占位符错误,translation缺失需启用strict_mode并监听translationfailureevent,db/http异常漏报须安装sentry/sentry-symfony等框架专用包。

能集成,但默认只捕获未处理异常和PHP错误——Translation缺失、PDO被catch住的异常、HTTP超时等都不会上报,必须手动配集成或监听事件。
DSN配置失效:sentry:test报空字符串或静默失败
这不是SDK没装好,而是环境变量根本没进容器或配置写错了占位符。
-
.env里必须写SENTRY_DSN=https://xxx@o123.ingest.sentry.io/456,不能漏掉https://前缀或认证部分 -
config/packages/sentry.yaml中要用dns: '%env(SENTRY_DSN)%',别写成%env(resolve:SENTRY_DSN)%(后者只适用于路径类变量) - 运行
php bin/console debug:container --parameter=env(SENTRY_DSN)确认值已解析;Docker用户要检查environment:或env_file:是否显式挂载
Translation缺失不上报:Twig里|trans不触发事件
Symfony Translator 默认遇到 app.welcome 没定义时直接返回原字符串,不抛异常,Sentry自然收不到。
- 启用严格模式:
config/packages/translation.yaml加strict_mode: true,此时缺失会抛InvalidArgumentException - 注册监听器监听
TranslationFailureEvent,不能靠kernel.exception——它不是异常,是事件 - Twig中
{{ 'app.welcome'|trans }}不触发该事件;得用{{ 'app.welcome'|trans({}, 'messages', app.request.locale) }}并确保locale可控 - 监听器内调用
$this->hub->captureMessage(),别用captureException(),类型不匹配会报错
DB/HTTP异常漏报:PDO或Guzzle被try/catch吞掉了
默认SDK只管“没被catch的异常”,你代码里 try { $pdo->query(...) } catch (PDOException $e) { log($e); },Sentry就当没事发生。
- 装框架专用包:
composer require sentry/sentry-symfony,它会自动注册 DBAL、HTTP Client、Cache 等集成 - 纯PHP项目可手动加
Sentry\Integration\ErrorListenerIntegration,但不如框架包省心 - 集成启用后仍需确认组件已安装:比如DBAL追踪依赖
doctrine/dbal,HTTP追踪依赖symfony/http-client,缺一不可 - CLI任务(如队列)要显式传
environment,否则和Web请求混在一起难过滤
最常被忽略的是:Sentry SDK初始化时机和Monolog通道绑定。初始化晚于路由解析,或把Sentry handler绑到错误channel却忘了设 level: error,日志就静默丢弃了——这类问题不会报错,只会让你以为“监控坏了”。











