gpt4 book ai didi

symfony - 来自请求的 API 平台记录 header

转载 作者:行者123 更新时间:2023-12-03 21:59:31 33 4
gpt4 key购买 nike

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

为了证明这一点,我想检查 API 平台是否收到 Authorization header 尝试获取数据时。我在 API 平台文档中没有找到任何关于日志的信息。 记录 API 请求及其 header 的正确方法是什么 使用 Symfony 日志系统,知道我无权访问实际的 Controller 代码,因为它纯粹是使用实体上的 APIRessource 注释配置的?

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

最佳答案

您可以为 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

服务.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(),
]);
}
}

关于symfony - 来自请求的 API 平台记录 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60551681/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com