web-dev-qa-db-ja.com

Guzzle 6を使用してすべてのAPI呼び出しをログに記録する方法

正常に機能するguzzle 6を使用しようとしていますが、すべてのAPI呼び出しをログに記録する方法に関しては迷っています。単にタイミング、セッションからログインしたユーザー、URL、およびAPI呼び出しに関連するその他の通常の関連情報をログに記録したいと思います。これを参照するGuzzle 6のドキュメントは見つかりません。guzzle3のみです(ロギングのaddSubscriber呼び出しが変更されています)。これが私の現在のAPI呼び出しの方法です。

$client = new GuzzleHttp\Client(['defaults' => ['verify' => false]]);
$res = $client->get($this->url . '/api/details', ['form_params' => ['file' => $file_id]]);
16
KingKongFrog

Guzzle 6でPSR-3インターフェイスを実装する任意のロガーを使用できます

以下の例では、ロガーとしてMonologを使用し、MessageFormatterでGuzzleの組み込みミドルウェアを使用しました。

use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
use GuzzleHttp\MessageFormatter;
use Monolog\Logger;

$stack = HandlerStack::create();
$stack->Push(
    Middleware::log(
        new Logger('Logger'),
        new MessageFormatter('{req_body} - {res_body}')
    )
);
$client = new \GuzzleHttp\Client(
    [
        'base_uri' => 'http://httpbin.org',
        'handler' => $stack,
    ]
);

echo (string) $client->get('ip')->getBody();

ログミドルウェアとメッセージフォーマッタに関する詳細は、まだ十分に文書化されていません。しかし、次のことはできます リストを確認 MessageFormatterで使用できる変数

また、フォーマッタなどをカスタマイズできる guzzle-logmiddleware もあります。

38
velioglu

@KingKongFrogこれは、ログファイルの名前を指定する方法です。

$logger = new Logger('MyLog');
$logger->pushHandler(new StreamHandler(__DIR__ . '/test.log'), Logger::DEBUG);

$stack->Push(Middleware::log(
$logger,
new MessageFormatter('{req_body} - {res_body}')
));
6
anhduc.bkhn