Заголовки журнала платформы API из запросов - PullRequest
1 голос
/ 05 марта 2020

У меня проблема с аутентификацией на рабочем сервере, скорее всего, проблема связана не с кодом, а с проблемой конфигурации ИТ ...

Чтобы доказать это, я бы хотел проверить если API Platform получает заголовок авторизации при попытке извлечь данные. Я не нашел ничего о журналах в документации по платформе API. Как правильно регистрировать запросы API и их заголовки , используя Symfony системы ведения журнала, зная, что у меня нет доступа к реальному коду контроллера, поскольку он чисто настроен с использованием аннотации APIRessource для объектов ?

Чтобы было понятно, все хорошо работает на локальном компьютере, я не ищу решения моей проблемы здесь, просто чистый способ изменить формат журнала или добавить журналы к входящему запросу с помощью API Платформа.

1 Ответ

2 голосов
/ 06 марта 2020

Вы можете создать прослушиватель для события kernel.terminate, которое будет регистрировать данные запросов и ответов. Примерно так.

monolog.yaml

monolog:
  handlers:
    request_log:
      type: rotating_file
      max_files: 90
      level: debug
      path: '%kernel.logs_dir%/request/%kernel.environment%.log'
      channels: request_log

services.yaml

App\EventListener\LogRequestAndResponseEventListener:
    tags:
        - { 'name': 'monolog.logger', 'channel': 'request_log' }
        - { 'name': 'kernel.event_listener', 'event': 'kernel.terminate', 'method': 'onKernelTerminate' }

слушатель

namespace App\EventListener;

use Psr\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\TerminateEvent;

class LogRequestAndResponseEventListener
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function onKernelTerminate(TerminateEvent $event)
    {
        $request = $event->getRequest();
        $response = $event->getResponse();

        $this->logger->info('data', [
            'route' => $request->getMethod() . ' ' . $request->getRequestUri(),
            'status' => $response->getStatusCode(),
            'request body' => $request->request->all(),
            'response' => json_decode($response->getContent(), true),
            'headers' => $request->headers->all(),
        ]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...