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 ?? []]);
}
/**
* Sends a test message to Sentry.
*/
public function doLogsTest(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();
\Sentry\logger()->info($this->t('Test log @time.', ['@time' => $dateTime->format('r')]));
$id = \Sentry\logger()->flush();
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');
}
};
}
}
