Как добавить пользователя в Sentry в Symfony4 для всех исключений? - PullRequest
0 голосов
/ 14 декабря 2018

Я добавил Sentry в свой проект, но он не добавляет текущего зарегистрированного пользователя для некоторых событий.

Я добавил подписчика на событие, но больше не уверен, действительно ли он мне нужен.Для исключений типа ArgumentCountError все работает отлично.Для NotFoundHttpException это не так.После небольшой отладки я обнаружил, что ExceptionListener-> onKernelRequest вызывается не со всеми исключениями.Я уже опустошил skip_capture в sentry.yaml, но это не помогло.Чего мне не хватаетЯ думаю, что распространение где-то остановлено.Но где?И как я могу это изменить?

<?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
...