首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加到中间件中的日志记录头

添加到中间件中的日志记录头
EN

Stack Overflow用户
提问于 2019-09-03 21:07:04
回答 1查看 82关注 0票数 0

我有一个如下的GuzzleClientLoggingHandler:

代码语言:javascript
复制
class GuzzleClientLoggingHandler
{
    /** @var HandlerStack */
    private $handlerStack;

    public function __construct(HandlerStack $handlerStack)
    {
        $this->handlerStack = $handlerStack;
    }

    public function log(): HandlerStack
    {
        $logger = Logger::getLogger(__CLASS__);

        $middleware = Middleware::log($logger, $this->request());
        $this->handlerStack->unshift($middleware);

        $middleware = Middleware::log($logger, $this->response());
        $this->handlerStack->unshift($middleware);

        return $this->handlerStack;
    }
}

我的客户看起来是这样的:

代码语言:javascript
复制
new Client([
    'base_uri' => 'https://example.com',
    'handler' => (new GuzzleClientLoggingHandler($handlerStack))->log()
]);

和可变$handlerStack具有n个中间件,例如:

代码语言:javascript
复制
$handlerStack->unshift(new LanguageMiddleware());

在中间件LanguageMiddleware中,我为每个请求设置了一个头

代码语言:javascript
复制
public function __invoke(callable $handler)
{
    return function (RequestInterface $request, array $options) use ($handler) {
        $request = modify_request($request, [
            'set_headers' => [
                'Accept-Language' => Session::get('language')
            ]
        ]);

        return $handler($request, $options);
    };
}

还有一个问题:如何使用已更改/已设置的头记录此请求?现在,中间件中的所有请求修改都不会出现在日志中。

EN

回答 1

Stack Overflow用户

发布于 2019-09-07 06:38:29

您需要更改堆栈中中间件的顺序。看看the docs,关于中间件如何应用于请求和响应有一个很好的解释(注意顺序!)。

因此,要记录应用了所有修改的请求,您需要使用->push()而不是->unshift()将中间件放在堆栈的末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57772411

复制
相关文章

相似问题

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