首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自请求的API平台日志头

来自请求的API平台日志头
EN

Stack Overflow用户
提问于 2020-03-05 18:13:57
回答 1查看 2.8K关注 0票数 4

我在生产服务器上有身份验证问题,这个问题很可能是与代码无关的,而是IT配置问题.

为了证明这一点,我想检查平台在尝试获取数据时是否接收到授权头。我在API平台文档中没有发现任何关于日志的内容。--使用Symfony日志系统记录API请求及其头部的正确方式是什么?我知道我无法访问实际的控制器代码,因为它是使用实体上的APIRessource注释配置的?

要明确的是,在本地一切都很好,我不是在这里寻找解决我的问题的解决方案,只是一种使用API平台更改日志格式或将日志添加到传入请求的干净方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-06 07:30:36

您可以为kernel.terminate事件创建一个侦听器,即记录请求和响应数据。就像这样。

monolog.yaml

代码语言:javascript
复制
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

代码语言:javascript
复制
App\EventListener\LogRequestAndResponseEventListener:
    tags:
        - { 'name': 'monolog.logger', 'channel': 'request_log' }
        - { 'name': 'kernel.event_listener', 'event': 'kernel.terminate', 'method': 'onKernelTerminate' }

侦听器

代码语言:javascript
复制
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(),
        ]);
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60551681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档