You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shopware 6中实现API请求与响应日志记录?

在Shopware 6中记录API请求与响应的方法

方法一:通过事件订阅结合内置日志系统实现自定义记录

这是最灵活的方式,可按需过滤和记录API请求/响应细节:

  1. 创建事件订阅类,监听Symfony的kernel.request和kernel.response事件,仅针对API路由处理:
<?php

namespace YourPlugin\Subscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Psr\Log\LoggerInterface;

class ApiLoggerSubscriber implements EventSubscriberInterface
{
    private $logger;

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

    public static function getSubscribedEvents(): array
    {
        return [
            RequestEvent::class => 'onKernelRequest',
            ResponseEvent::class => 'onKernelResponse',
        ];
    }

    public function onKernelRequest(RequestEvent $event): void
    {
        $request = $event->getRequest();
        // 过滤仅/api开头的路由
        if (str_starts_with($request->getPathInfo(), '/api/')) {
            $this->logger->info('API Request', [
                'method' => $request->getMethod(),
                'uri' => $request->getRequestUri(),
                'headers' => $request->headers->all(),
                'content' => $request->getContent(),
                'client_ip' => $request->getClientIp()
            ]);
        }
    }

    public function onKernelResponse(ResponseEvent $event): void
    {
        $request = $event->getRequest();
        $response = $event->getResponse();
        if (str_starts_with($request->getPathInfo(), '/api/')) {
            $this->logger->info('API Response', [
                'status_code' => $response->getStatusCode(),
                'headers' => $response->headers->all(),
                'content' => $response->getContent()
            ]);
        }
    }
}
  1. 在插件的src/Resources/config/services.xml中注册该订阅者:
<service id="YourPlugin\Subscriber\ApiLoggerSubscriber">
    <argument type="service" id="logger"/>
    <tag name="kernel.event_subscriber"/>
</service>
  1. 日志会输出到Shopware的默认日志文件中,开发环境为var/log/dev.log,生产环境为var/log/prod.log。

方法二:利用Symfony Profiler(仅开发环境)

开发环境下,直接访问Shopware项目的/_profiler路径,找到对应的API请求条目,即可查看完整的请求头、请求体、响应头及响应体内容,适合临时调试,无需额外开发工作。

方法三:自定义持久化存储(按需扩展)

如果需要将API日志持久化到数据库或其他存储介质,可以基于事件订阅的逻辑,创建自定义实体(如ApiLogEntity),在事件处理方法中将请求/响应数据写入实体并保存到数据库,方便后续查询和分析。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:57:09