diginov/craft-sentry-logger

通过真正的 Yii 2 日志目标将 Craft CMS 日志推送到 Sentry

安装次数: 119,288

依赖: 2

建议者: 0

安全: 0

星星: 5

观察者: 2

分支: 7

开放问题: 2

类型:craft-plugin

5.0.1 2024-04-19 20:39 UTC

README

Sentry Logger Icon

Craft CMS 的 Sentry 日志记录器

通过真正的 Yii 2 日志目标将 Craft CMS 日志推送到 Sentry

Sentry Logger Screenshot

功能

  • 更新到最新和官方的 Sentry SDK
  • 原生 Yii 2 日志目标,可完全自定义
  • 发送每个请求的所有错误和警告
  • 插件设置可以在 CP 或配置文件中定义
  • 初始化 Sentry SDK 时传递的选项可以自定义
  • 发送并分类 Craft::error()Craft::warning() 调用
  • 匿名选项可防止敏感访客和用户数据被发送到 Sentry

推送到 Sentry 的其他数据

  • 请求类型(Web、Ajax 或控制台)
  • 请求方法、头和正文
  • 请求路由包括查询字符串
  • 执行的脚本包括参数(控制台请求)
  • 用户 ID、电子邮件、用户名和组(敏感数据)
  • 访客 IP 地址(敏感数据)
  • 访客 Cookie(敏感数据)
  • 数据库驱动程序类型和版本
  • 图像驱动程序类型和版本
  • Craft 版本、许可、架构和版本
  • 从常规配置中获取 Craft devMode 状态
  • CRAFT_ENVIRONMENT 获取 Craft 当前环境
  • 编译模板中异常的 Twig 模板路径和行号

要求

此插件需要 PHP 8.2 或更高版本和 Craft CMS 5.0 或更高版本。

安装

要安装此插件,在 Craft 插件商店中搜索 Sentry Logger 并点击 安装,或在您的 Craft 项目文件夹中运行以下终端命令以使用 Composer 安装它:

composer require diginov/craft-sentry-logger
php craft plugin/install sentry-logger

基本配置

您可以直接在 CP 中配置插件设置,或者您可以创建一个 config/sentry-logger.php 配置文件,内容如下。请确保根据正确的值更新您的 .env 环境文件。

<?php

use craft\helpers\App;

return [

    '*' => [
        'enabled' => false,
        'anonymous' => false,
        'dsn' => App::env('SENTRY_DSN'),
        'release' => App::env('SENTRY_RELEASE'),
        'environment' => App::env('SENTRY_ENVIRONMENT'),
        'levels' => ['error', 'warning'],
        'exceptCodes' => [403, 404],
        'exceptPatterns' => [],
    ],

    'staging' => [
        'enabled' => true,
    ],

    'production' => [
        'enabled' => true,
    ],

];

高级配置

这是一个更好的方法,因为它在加载任何 Craft 插件或模块之前将此 Sentry 日志目标添加到现有的日志组件中。这样您可以确保所有日志都发送到 Sentry。

请注意,此方法覆盖了基本配置方法。

要激活高级配置,扩展您现有的 config/app.php 配置文件中的 log 组件

<?php

use craft\helpers\App;
use diginov\sentrylogger\log\SentryTarget;

return [

    'components' => [
        'log' => [
            'targets' => [
                'sentry' => function() {
                    if (!class_exists(SentryTarget::class)) {
                        return null;
                    }

                    return Craft::createObject([
                        'class' => SentryTarget::class,
                        'enabled' => App::env('CRAFT_ENVIRONMENT') !== 'dev',
                        'anonymous' => false,
                        'dsn' => App::env('SENTRY_DSN'),
                        'release' => App::env('SENTRY_RELEASE'),
                        'environment' => App::env('SENTRY_ENVIRONMENT'),
                        'levels' => ['error', 'warning'],
                        'exceptCodes' => [403, 404],
                        'exceptPatterns' => [],
                    ]);
                },
            ],
        ],
    ],

];

配置参数

此插件添加了一个原生的 Yii 2 日志目标,它是 yii\log\Target 类的实例。有关所有可用属性的说明,请参阅 Yii 2 API 文档

enabled

此必需参数是一个布尔值,表示是否启用此日志目标。

anonymous

此可选参数是一个布尔值,表示启用时,此日志目标将不会将敏感访客和用户数据发送到 Sentry。

userPrivacy

此可选参数是一个数组,包含当 anonymous 参数设置为 false 时将发送到 Sentry 的敏感用户数据。可用值包括 idemailusernameip_addresscookiespermissions。默认为所有敏感用户数据。

dsn

这个必需的参数是一个字符串,包含Sentry在您的项目设置中提供的客户端密钥(DSN)。

发布

这个可选参数是一个字符串,包含您部署到环境中的应用程序版本。有关Sentry文档中关于发布的更多信息。

环境

这个可选参数是一个字符串,包含指定您的应用程序部署位置的环境标签。默认为CRAFT_ENVIRONMENT。在Sentry文档中了解更多关于环境的信息。

选项

这个可选参数是一个数组,包含在Sentry SDK初始化时传递给客户端的选项。在Sentry文档中查看有关可用选项的更多信息。

级别

这个必需的参数是一个数组,包含这个日志目标感兴趣的日志级别名称。默认为errorwarning。我们故意禁用了向Sentry报告infoprofiledebug日志级别,因为Craft为这些日志级别生成了很多消息。

类别

这个可选参数是一个数组,包含这个日志目标感兴趣的日志消息类别。默认为空,表示所有类别。您可以在类别末尾使用星号,以便可以使用它来匹配具有相同常见前缀的类别。例如,yii\db*将匹配以yii\db\开头的类别,如yii\db\Connection

除外

这个可选参数是一个数组,包含这个日志目标不感兴趣的日志消息类别。默认为空,表示没有不感兴趣的类别。如果这个属性不为空,则列出的任何类别都将从categories参数中排除。您可以在类别末尾使用星号,以便可以使用它来匹配具有相同常见前缀的类别。例如,yii\db*将匹配以yii\db\开头的类别,如yii\db\Connection

除外代码

这个可选参数是一个数组,包含这个日志目标不感兴趣的HTTP状态代码。这是except参数的一个快捷方式,以便更容易使用。默认为403404,这意味着yii\web\HttpException:403yii\web\HttpException:404类别将从categories参数中排除。

除外模式

这个可选参数是一个数组,包含这个日志目标不感兴趣的文本搜索模式。默认为空,表示没有不感兴趣的文本搜索模式。这些文本搜索模式将与异常消息、错误或警告的文本匹配。这对于过滤掉没有异常代码发送的文本消息非常有用,例如由Craft::error()Craft::warning()方法发送的消息。

致谢

灵感来源于olegtsvetkov/yii2-sentry包,以及官方的sentry/sentry-symfonysentry/sentry-laravel包。