olegtsvetkov/yii2-sentry

此包已被放弃且不再维护。没有建议的替代包。

为 Sentry 的 Yii2 集成

v1.4 2019-11-23 16:45 UTC

This package is auto-updated.

Last update: 2021-02-21 12:58:29 UTC


README

使用 Sentry PHP SDK v2 为 Sentry 实现的 Yii2 集成。

灵感来自官方的 sentry/sentry-symfonysentry/sentry-laravel 包。

安装

安装此包的首选方式是通过 composer

composer require olegtsvetkov/yii2-sentry:^1.0

包默认不提供任何 HTTP 传输。要使用推荐的 HTTP 客户端安装包,请使用特殊的元包

composer require olegtsvetkov/yii2-sentry-curl-client:^1.0

基本用法

将 "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 的选项。

此外,Sentry 的 ClientBuilder 正在使用 Yii 的容器创建,允许自定义构建器注入。

个人身份信息(PII)处理

默认情况下,Sentry 在其端提供 PII 处理,但它不提供对 PII 剥离过程的完全控制。因此,Yii2 Sentry 包能够从请求头和请求体中剥离 PPI。

组件配置的示例,包括有关 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,
    ],
]