2015-09-20 45 views
9

我正在尝试使用可以正常工作的guzzle 6,但是在涉及如何记录所有api调用时我已经丢失了。我想简单地记录时间,登录用户的会话,网址和任何其他通常与API调用相关的信息。我似乎无法找到Guzzle 6的任何文档引用此,只有guzzle 3(他们已经改变了日志addSubscriber调用)。这是我目前的API调用如何:如何使用Guzzle来记录所有API调用6

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

回答

29

你可以用它实现与狂饮6

我用独白的记录和下面的例子狂饮与MessageFormatter的内置中间件PSR-3接口的任何记录。

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}') 
)); 
相关问题