raven-8.x-2.x-dev/src/Controller/TestController.php

src/Controller/TestController.php
<?php

namespace Drupal\raven\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\raven\Event\OptionsAlter;
use Drupal\raven\Logger\RavenInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\LoggerTrait;
use Sentry\Severity;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

/**
 * Sends test message to Sentry.
 */
class TestController extends ControllerBase {

  /**
   * Constructs a new TestController instance.
   */
  final public function __construct(
    protected EventDispatcherInterface $eventDispatcher,
    protected RavenInterface $logger,
  ) {
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container): static {
    return new static(
      $container->get('event_dispatcher'),
      $container->get('logger.raven'),
    );
  }

  /**
   * Sends a test message to Sentry.
   */
  public function doTest(Request $request): JsonResponse {
    $logger = $this->createLogger();
    $listener = fn(OptionsAlter $event) => $event->options['logger'] = $logger;
    // Add listener to modify Sentry client options.
    $this->eventDispatcher->addListener(OptionsAlter::class, $listener);
    // Initialize a new Sentry client with debug logging enabled.
    $this->logger->getClient(TRUE);
    $dateTime = new \DateTime();
    $id = \Sentry\captureMessage($this->t('Test message @time.', ['@time' => $dateTime->format('r')]), new Severity('info'));
    return new JsonResponse(['id' => (string) $id, 'log' => $logger->log ?? []]);
  }

  /**
   * Returns a debug logger.
   */
  public function createLogger(): LoggerInterface {
    return new class() implements LoggerInterface {
      use LoggerTrait;
      /**
       * Array of log messages.
       *
       * @var array{'level': string, 'message': string}
       */
      public array $log;

      /**
       * {@inheritdoc}
       */
      public function log(mixed $level, string|\Stringable $message, array $context = []): void {
        $this->log[] = compact('level', 'message');
      }

    };
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc