2015-09-20 10 views
9

guzzle 6を使用しようとしていますが、すべてのAPI呼び出しを記録する方法は失われます。私は単にタイミングをログに記録し、セッションからのユーザー、url、およびAPIコールと関係がある他の通常の関連情報にログインしたいと思います。私はこれを参照しているGuzzle 6のドキュメントを見つけることはできませんが、guzzle 3(ここではaddSubscriberの呼び出しを変更しました)だけです。Guzzle 6を使用してすべてのAPI呼び出しをログに記録する方法

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

答えて

29

あなたががつがつ食う6

私はロガーと例以下でMessageFormatterでがつがつ食うの組み込みミドルウェアとしてモノローグを使用してPSR-3インターフェイスを実装する任意のロガーを使用することができます。これは私の現在のAPI呼び出しがある方法です。

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(); 

ログミドルウェアとメッセージフォーマッタの詳細についてはまだ十分に説明されていません。あなたはcheck the listあなたがMessageFormatter

に使用することができますすることができますどの変数等もあなたがフォーマッタをカスタマイズすることができますguzzle-logmiddleware

+0

ここで、このコードでログファイルの名前を指定しますか?これを投稿していただきありがとうございます! – KingKongFrog

+0

例ではハンドラを設定しませんでした。ロガーで使用するハンドラの種類を選択できます。 メッセージをファイルに記録する場合は、StreamHandlerを選択する必要があります。 [その他のオプションについては、[Monologのドキュメントをチェック](https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md#handlers)を参照してください。 ロガーの作成中にハンドラを渡すことも、 'pushHandler'メソッドを使って後でハンドラを設定することもできます。 これを確認する[例](https://github.com/Seldaek/monolog/blob/master/doc/01-usage.md#configuring-a-logger)@KingKongFrog – velioglu

+0

美しい@Velioglu – KingKongFrog

0

@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}') 
)); 
ログファイルの名前を指定する方法であります