alexsaab/guzzle_logger

一个用于自动记录请求和响应的 Guzzle 中间件

v2.0.1 2021-05-20 09:57 UTC

This package is auto-updated.

Last update: 2024-09-20 16:56:17 UTC


README

codecov Total Downloads Build Status MIT licensed PHPPackages Rank

这是一个位于 https://github.com/gmponos/guzzle-log-middleware 的原始库的分支

这是一个为 guzzle 设计的中间件,可以帮助您使用 PSR-3 日志记录器自动记录每个请求和响应。

中间件与 Guzzle 的 6 版本兼容。

安装

通过 Composer

$ composer require alexsaab/guzzle_logger

用法

简单用法

use GuzzleLogMiddleware\LogMiddleware;
use GuzzleHttp\HandlerStack;

$logger = new Logger();  //A new PSR-3 Logger like Monolog
$stack = HandlerStack::create(); // will create a stack stack with middlewares of guzzle already pushed inside of it.
$stack->push(new LogMiddleware($logger));
$client = new GuzzleHttp\Client([
    'handler' => $stack,
]);

从此以后,使用 $client 对象执行每个请求和响应都会被记录。默认情况下,中间件使用 DEBUG 级别记录每个活动。

高级初始化

LogMiddleware 类的签名如下

\GuzzleLogMiddleware\LogMiddleware(
    \Psr\Log\LoggerInterface $logger, 
    \GuzzleLogMiddleware\Handler\HandlerInterface $handler = null, 
    bool $onFailureOnly = false, 
    bool $logStatistics = false
);
  • logger - 用于记录的 PSR-3 日志记录器。
  • handler - 一个负责记录您的请求/响应的 HandlerInterface 类。查看处理程序部分。
  • onFailureOnly - 默认情况下,中间件设置为记录每个请求和响应。如果您希望在 Guzzle 返回拒绝时仅记录 HTTP 消息,请设置为 true 或当发生异常时。Guzzle 在 http_errors 选项设置为 true 时返回拒绝。
  • logStatistics - 如果您将此选项设置为 true,则中间件还将记录有关 HTTP 事务的统计信息。

处理程序

为了使中间件更加灵活,我们允许开发者使用处理程序来初始化它。处理程序是负责记录 HTTP 消息的类,它必须实现 HandlerInterface

例如,假设我们创建以下处理程序

<?php
namespace GuzzleLogMiddleware\Handler;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\RequestInterface;
use GuzzleHttp\TransferStats;
use Psr\Log\LoggerInterface;

/** A simple handler that logs only requests */
final class SimpleHandler implements HandlerInterface
{
    public function log(
        LoggerInterface $logger,
        RequestInterface $request,
        ?ResponseInterface $response = null,
        ?\Throwable $exception = null,
        ?TransferStats $stats = null,
        array $options = []
    ): void {
        $logger->debug('Guzzle HTTP request: ' . \GuzzleHttp\Psr7\str($request));
        return;
    }
}

我们可以在构造中间件时传递上面的处理程序。

<?php
use GuzzleLogMiddleware\LogMiddleware;
use GuzzleHttp\HandlerStack;

$logger = new Logger();  //A new PSR-3 Logger like Monolog
$stack = HandlerStack::create(); // will create a stack stack with middlewares of guzzle already pushed inside of it.
$stack->push(new LogMiddleware($logger, new SimpleHandler()));
$client = new GuzzleHttp\Client([
    'handler' => $stack,
]);

从此以后,所有请求都将被记录。注意,在上面的示例中仅记录请求。

重要

如果没有传递处理程序,中间件将初始化自己的处理程序。目前默认的处理程序是 MultiRecordArrayHandler

MultiRecordArrayHandler

这是中间件使用的默认处理程序。此处理程序内部使用 FixedStrategy 并使用调试级别记录所有请求和响应。此处理程序为每个 RequestResponseExceptionTransferStats 添加单独的日志条目。每个对象的信息作为 context 数组添加到日志条目中。

StringHandler

此处理程序内部使用 FixedStrategy 并使用调试级别记录所有请求和响应。您可以使用自定义策略初始化此处理程序。此处理程序为每个请求、响应、异常或传输统计信息添加单独的日志条目。处理程序将对象转换为字符串,并将每个对象的信息添加到日志条目的 message 中。

日志级别策略

策略用于定义处理程序将用于记录每个对象的日志级别。

FixedStrategy

您可以使用此策略以特定级别记录每个 HTTP 消息。

StatusCodeStrategy

您可以使用此策略根据响应状态码的级别记录每个HTTP响应。

$strategy = new StatusCodeStrategy(
    LogLevel::INFO, // Default level used for requests or for responses that status code are not set with a different level.
    LogLevel::CRITICAL // Default level used for exceptions.
);
$strategy->setLevel(404, LogLevel::WARNING);
$multiRecordArrayHandler = new MultiRecordArrayHandler($strategy);

$logger = new Logger();  //A new PSR-3 Logger like Monolog
$stack = HandlerStack::create(); // will create a stack stack with middlewares of guzzle already pushed inside of it.
$stack->push(new LogMiddleware($logger, $multiRecordArrayHandler));
$client = new GuzzleHttp\Client([
    'handler' => $stack,
]);

使用每个请求的选项

您可以在每个请求上设置有关日志的选项。

$client->get('/', [
    'log' => [
        'on_exception_only' => true,
        'statistics' => true,
    ]
]);
  • on_exception_only 只有当响应状态码高于阈值时,才记录任何内容。
  • statistics 如果 on_exception_only 选项/变量为 true,并且这也为 true,则中间件将记录有关HTTP调用的统计信息。

变更日志

有关最近更改的更多信息,请参阅变更日志

测试

$ composer test

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件