如何在 Symfony4 中将用户添加到 Sentry 以应对所有异常?

2024-04-14

我将 Sentry 添加到我的项目中,但它不会添加某些事件的当前登录用户。

我添加了一个事件订阅者,但我不确定我是否真的需要它。对于像 ArgumentCountError 这样的例外情况,一切正常。对于 NotFoundHttpException 则不然。经过一番调试后,我发现并不是每个异常都会调用 ExceptionListener->onKernelRequest 。我已经清空了sentry.yaml中的skip_capture,但这没有帮助。 我缺少什么。我的猜测是传播在某个地方停止了。但是哪里?我该如何改变这一点?

<?php
// src/EventSubscriber/SentrySubscriber

namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Sentry\SentryBundle\SentrySymfonyEvents;
use Symfony\Component\HttpKernel\KernelEvents;

class SentrySubscriber implements EventSubscriberInterface {

    /** @var \Raven_Client */
    protected $client;
    private $username;

    public function __construct(\Raven_Client $client) {
        $this->client = $client;
    }

    public static function getSubscribedEvents() {
        return array(
            SentrySymfonyEvents::PRE_CAPTURE => 'preCapture',
            SentrySymfonyEvents::SET_USER_CONTEXT => 'setUserContext',
        );
    }

    public function preCapture(GetResponseForExceptionEvent $event, $eventName, EventDispatcher $dispatcher) {
// username is empty, because setUserContext wasn't executed
// echo 'preCapture';var_dump($this->username);var_dump($this->client->_user);
        $this->client->user_context(['username' => $this->username]);
    }

    public function setUserContext(\Sentry\SentryBundle\Event\SentryUserContextEvent $event) {
//      echo 'setUserContext';      var_dump($event->getAuthenticationToken()->getUsername());
        $this->username = $event->getAuthenticationToken()->getUsername();
    }

}

我的配置:

// config/services.yaml
services:
    App\EventSubscriber\SentrySubscriber:
        arguments:
          - '@sentry.client'
        tags:
          - { name: kernel.event_subscriber }

// config/packages/sentry.yaml
sentry:
    dsn: '%env(SENTRY_DSN)%'
    options:
        curl_method: async
        release: '%env(RELEASE)%'

    skip_capture: # nothing else here, because everything should be captured

默认情况下,Sentry 不会发送用户数据,以防止 GDPR 和类似法规出现问题。

如果您想重新启用发送用户数据,请将其添加到sentry.yaml:

sentry:
    options:
        send_default_pii: true

官方文档here https://docs.sentry.io/data-management/sensitive-data/.

该检查实施于\Sentry\SentryBundle\EventListener\RequestListener::onKernelRequest.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Symfony4 中将用户添加到 Sentry 以应对所有异常? 的相关文章

随机推荐

  • 计算机编程艺术练习题:第 1 章,问题 8

    我正在做 TAOCP 第 1 卷第 3 版的练习 但无法理解以下练习的答案中使用的语法 第 1 章练习 8 Computing the greatest common divisor of positive integers m n by
  • 干预/图像需要文件信息

    我在干预 图像方面遇到问题 Laravel composer install intervention image 2 1 1 requires ext fileinfo gt the requested PHP extension fil
  • 如何改进构建器模式?

    动机 最近我寻找一种方法来初始化复杂的对象 而不需要向构造函数传递大量参数 我尝试使用构建器模式 但我不喜欢这样的事实 即我无法在编译时检查是否确实设置了所有需要的值 传统建造者模式 当我使用构建器模式来创建我的Complex对象 创建更加
  • 在 C 中无需 va_list 即可访问可变参数函数的参数

    是否可以使用指向最后一个命名参数的指针 void 指针 来迭代可变参数函数的参数 我知道这不是使用可变参数的正确方法 但我仍然感兴趣这是否可行 将指针设置到字符串的末尾不起作用 因为在我开始移动指针后 它指向程序中使用的其他字符串 incl
  • 根据之前从本地存储选择的过滤器推送历史记录

    由于我是 React 新手 我尝试根据本地存储中存储的先前选择的过滤器正确实现路由 然后在应用程序启动时将它们推送到历史记录 有超时 如果没有超时 应用程序会在获取用户上下文 令牌身份验证之间跳转 http localhost 3000 t
  • 链表数组 C++

    所以我以为我理解如何实现指针数组 但我的编译器说否则 任何帮助将不胜感激 我觉得我已经很接近了 但缺少一些关键的东西 1 我声明了一个名为 node 的结构 struct node int num node next 2 我已经声明了一个指
  • 如何以编程方式检测小米设备中的全屏手势模式

    我正在编写一个 Android 应用程序 需要计算屏幕的高度才能正确显示内容 但是当我切换到全屏手势模式时 我在小米设备 Mi 9 SE 中获得的高度不正确 如何获取小米设备屏幕的真实高度 或者检查用户是否开启了全屏手势模式 我已经尝试过这
  • 将 exe 和 msi 文件合并到一个安装程序中

    我有两个安装文件 间谍软件 后续 msi 我希望将这两个安装文件合并到一个安装文件中 以便可以在目标计算机上同时一一安装 我尝试了 NSIS 但它只是从安装文件中提取文件 但没有安装软件包 Inno Setup 也做了同样的事情 我的问题是
  • 安装ADT插件后,不出现欢迎使用Android开发

    使用 ADT 插件安装 Eclipse 后我陷入困境 完成所有步骤后 它应该显示 欢迎来到 android 开发 但我只看到 Java 开发 我的设置如下 Java JDK 6 日食朱诺 SR1 Android SDK 4 1 所有默认包和
  • 如何让 docker 工具箱与 .net core 2.0 项目一起使用

    我尝试在 NET core 2 0 项目中使用 Docker 功能时遇到错误 我收到一条错误消息 Visual Studio 容器工具需要先运行 Docker 构建 调试或运行容器化项目 欲了解更多信息 请参见 http aka ms Do
  • Rxjava - 链接可观察量时如何获取其他类型的流(返回值)而不是当前的流?

    我执行了一个 Retrofit2 observable 调用 在完成后它立即链接到另一个 observable 以将结果存储到数据库中 它看起来很简单 如下所示 protected Observable
  • 设置字符串中某个字符的样式

    我想通过 jQuery 设置字符串中某个字符的样式 但不知道如何实现 我有以下情况 a href Link a 我自己的方法是 a accesskey each selects only those a elements with an a
  • Laravel 中的渴望加载约束过滤器问题

    我无法过滤内容groups表关于username in users表使用急切负载约束 http laravel com docs 4 2 eloquent eager loading public function username ret
  • Jenkins CLI 连接被拒绝

    执行时 java jar jenkins cli jar s https jenkins url help 由于某种原因我的连接被拒绝 Jenkins版本是1580 3 用户拥有Jenkins服务器的权限 cli jar是最新的并且ssh公
  • SQL INNER JOINing 2 子查询

    我试图将这两个子查询 我认为这就是它的名字 内部联接在一起 其中第一个查询的branchName等于第二个查询的branchName 然而 他们似乎并不想联合起来 而且以我有限的 SQL 知识 我似乎找不到解决这个问题的方法 我尝试将括号移
  • Tegra 平板电脑上的 NDK 调试

    今天 我购买了用于本机开发的 Android 平板电脑 采用 Tegra 的 Acer Iconina Tab A500 Honeycomb 3 1 然后我从以下位置下载并安装了 Tegra Android Development Pack
  • Google Cloud Text To Speech API 快速入门示例

    我是这个论坛的新手 我正在尝试让 Google Cloud TTS API 正常工作 但遇到了一些问题 页面是 https cloud google com text to speech docs quickstart protocol h
  • SolrCloud:无法创建集合、锁定问题

    我一直在尝试实现 SolrCloud 一切正常 直到我尝试创建包含 6 个分片的集合 我的设置如下 5 个虚拟服务器 全部运行 Ubuntu 14 04 由一家公司跨不同数据中心托管 为整体运行 ZooKeeper 3 4 6 的 3 台服
  • C# 清除ListView中的所有项目

    我尝试清除列表视图 但清除方法不起作用 myListView Items Clear 这是行不通的 当我在这一行放置断点时 该行将被执行 但我的列表视图不为空 怎么会 我通过将列表视图的数据源设置为数据表来填充列表视图 我现在的解决方案是将
  • 如何在 Symfony4 中将用户添加到 Sentry 以应对所有异常?

    我将 Sentry 添加到我的项目中 但它不会添加某些事件的当前登录用户 我添加了一个事件订阅者 但我不确定我是否真的需要它 对于像 ArgumentCountError 这样的例外情况 一切正常 对于 NotFoundHttpExcept