Guzzle 6を使用してすべてのAPI呼び出しをログに記録するにはどうすればよいですか?質問する

Guzzle 6を使用してすべてのAPI呼び出しをログに記録するにはどうすればよいですか?質問する

私は guzzle 6 を使用しようとしていますが、これは問題なく動作しますが、すべての API 呼び出しをログに記録する方法がわかりません。タイミング、セッションからログインしたユーザー、URL、および API 呼び出しに関連するその他の通常の関連情報をログに記録したいだけです。これについて言及している Guzzle 6 のドキュメントは見つからず、guzzle 3 (addSubscriber 呼び出しのログ記録が変更された) のみで見つかります。これが現在の API 呼び出しです。

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

ベストアンサー1

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-logミドルウェアこれにより、フォーマッタなどをカスタマイズできます。

おすすめ記事