micahelslobodskih / yii2-sentry-fresh
Yii2 对 Sentry 的集成
Requires
- php: ^7.3 || ^7.4 || ^8.0
- nyholm/psr7: ^1.0
- sentry/sdk: ^3.1
- sentry/sentry: ^3.3
- symfony/psr-http-message-bridge: ^1.0 | ^2.0
- yiisoft/yii2: ~2.0.13
Requires (Dev)
- php-http/mock-client: ^1.0
Suggests
- http-interop/http-factory-guzzle: Recommended HTTP factory for Sentry SDK
- php-http/curl-client: Recommended HTTP client for Sentry SDK
This package is not auto-updated.
Last update: 2024-09-28 16:10:19 UTC
README
使用 Sentry PHP SDK v3 集成 Yii2 对 Sentry。
灵感来源于官方的 sentry/sentry-symfony 和 sentry/sentry-laravel 包。
安装
安装此包的首选方式是通过 composer
composer require exileed/yii2-sentry
默认情况下,此包不提供任何 HTTP 传输。要使用推荐的 HTTP 客户端安装包,请使用特殊的元包
composer require php-http/curl-client
基本用法
将 "sentry" 组件添加到应用的配置和引导中,然后按照以下方式配置日志目标
<?php return [ 'id' => 'my-app', 'bootstrap' => [ 'sentry', 'log', ], 'components' => [ 'sentry' => [ 'class' => OlegTsvetkov\Yii2\Sentry\Component::class, 'dsn' => 'https://abcdefghijklmnopqrstuvwxyz123456@sentry.io/0000000', ], 'log' => [ 'targets' => [ [ 'class' => OlegTsvetkov\Yii2\Sentry\LogTarget::class, 'levels' => ['error', 'warning'], 'except' => [ 'yii\web\HttpException:40*', ], ], ], ], ], ];
别忘了将 DSN 改为你的。
在此之后,所有异常(除了黑名单中的),PHP 错误和对 Yii::error()
和 Yii:warning()
的调用都将被记录到 Sentry。
强烈建议黑名单中包含所有 Yii 的异常以处理 40x 响应,因为它们用于处理请求,并不表示任何类型的问题。
默认组件提供了关于请求的详细信息,例如
- 请求方法
- 请求 URL(包括查询字符串)
- 请求头
- 请求体
- 解析的路由(用于标签)
- 登录用户的用户 ID
- 访客的 IP 地址
- 访客的 Cookie(如果启用了发送默认 PII)
- 应用环境(从
YII_ENV
获取) - 异常的堆栈跟踪
关于 LogTarget 的重要提示
捆绑在 Log Target 中的将只为每个请求发送 一个 消息到 Sentry。此消息将基于具有最高严重级别的日志条目。所有其他条目将放入消息的额外字段 "logs" 中
高级用法
Sentry 客户端配置
组件为 Sentry 客户端提供了默认配置。它可以通过 Component::$sentrySettings
属性被覆盖和扩展。直接使用 Sentry PHP SDK 选项。
此外,使用 Yii 的容器创建了 Sentry 的 ClientBuilder,这允许自定义构建器注入。
个人识别信息(PII)处理
默认情况下,Sentry 在其端提供 PII 处理,但它不提供对 PII 剥离过程的完全控制。因此,Yii2 Sentry 包能够从请求头和请求体中去除 PII。
组件配置示例,包含 PII 相关设置完整列表
<?php [ 'class' => OlegTsvetkov\Yii2\Sentry\Component::class, 'dsn' => 'https://abcdefghijklmnopqrstuvwxyz123456:abcdefghijklmnopqrstuvwxyz123456@sentry.io/0000000', 'integrations' => [ [ 'class' => OlegTsvetkov\Yii2\Sentry\Integration::class, // Headers that should not be send to Sentry at all 'stripHeaders' => ['cookie', 'set-cookie'], // Headers which values should be filtered before sending to Sentry 'piiHeaders' => ['custom-token-header', 'authorization'], // Body fields which values should be filtered before sending to Sentry 'piiBodyFields' => [ 'controller/action' => [ 'field_1' => [ 'field_2', ], 'field_2', ], 'account/login' => [ 'email', 'password', ], ], // Text to replace PII values with 'piiReplaceText' => '[Filtered PII]', ], Sentry\Integration\ErrorListenerIntegration::class, ], ]