softonic / guzzle_logger
一个用于自动记录请求和响应的 Guzzle 中间件
Requires
- php: ^7.2 || ^8.0
- ext-json: *
- guzzlehttp/guzzle: ^6.1 || ^7
- guzzlehttp/psr7: ^1.7 || ^2.0
- psr/log: ^1.1 || ^2.0 || ^3.0
Requires (Dev)
- colinodell/psr-testlogger: ^1.3
- phpstan/phpstan: ~0.12.32
- phpstan/phpstan-phpunit: ^0.12.11
- phpstan/phpstan-strict-rules: ^0.12.2
- phpunit/phpunit: ^8.5.8 || ^9.2.5
- squizlabs/php_codesniffer: ^3.5.5
Suggests
- monolog/monolog: A PSR-3 logger to send your logs to files, sockets and various web services
README
这是一个用于 guzzle 的中间件,可以帮助您使用 PSR-3 记录器自动记录每个请求和响应。
中间件与 Guzzle 的第 6 版兼容。
安装
通过 Composer
$ composer require softonic/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 或当发生异常时。当 http_errors 选项设置为 true 时,Guzzle 返回拒绝。
- 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
并以调试级别记录所有请求和响应。此处理程序为每个 Request
、Response
、Exception
或 TransferStats
添加单独的日志条目。每个对象的信息都添加到日志条目的 context
数组中。
StringHandler
此处理程序内部使用 FixedStrategy
并以调试级别记录所有请求和响应。您可以初始化此处理程序以自定义策略。此处理程序为每个请求、响应、异常或传输统计信息添加单独的日志条目。处理程序将对象转换为字符串,并将每个对象的信息添加到日志条目的 message
中。
日志级别策略
策略用于定义处理程序将用于记录每个对象的 LogLevel。
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
除非响应状态码超过阈值,否则不记录任何内容。- 如果
on_exception_only
选项/变量为 true,则进行statistics
操作,并且中间件会记录关于 HTTP 调用的统计数据。
变更日志
请参阅 变更日志 以获取有关最近变更的更多信息。
测试
$ composer test
鸣谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。