2015-09-22 8 views
9

का उपयोग कर एपीआई कॉल की अवधि प्राप्त करने का सबसे अच्छा तरीका क्या है वर्तमान में गुज़ल 6 के साथ ऐसा लगता है कि एपीआई कॉल की अवधि प्राप्त करने के लिए बॉक्स के बाहर कोई रास्ता नहीं है। नीचे दिए गए कोड का उपयोग करके इस स्टेट को किसी सामान्य कॉल के साथ प्राप्त करने का सबसे अच्छा तरीका क्या है।Guzzle 6

मैं How do you log all API calls using Guzzle 6

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

उत्तर

3

से निम्नलिखित कोड का उपयोग कर रहा मैं 'on_stats के अनुरोध विकल्प का उल्लेख Guzzle Docs - Request Options और TransferStats object

इसे लागू करने के आप का उपयोग करने के अपने GET अनुरोध को संशोधित करेगा अनुरोध विकल्प। यह निम्न की तरह कुछ होगा:

// get($uri, $options) proxies to request($method, $uri, $options) 
// request($method, $uri, $options) proxies to requestAsync($method, $uri, $options) 
// and sets the $options[RequestOptions::SYNCHRONOUS] to true 
// and then waits for promises to resolve returning a Psr7\http-message\ResponseInterface instance 

$response = $client->get($uri, [ 
    'on_stats' => function (TransferStats $stats) use ($logger) { 
     // do something inside the callable. 
     echo $stats->getTransferTime() . "\n"; 
     $logger->debug('Request' . $stats->getRequest() . 
         'Response' . $stat->getResponse() . 
         'Tx Time' . $stat->getTransferTime() 
     ); 
    }, 
]); 
echo $response->getBody(); 

** नोट: मुझे विश्वास है वहाँ यह सुनिश्चित लॉग अच्छे स्वरूपित है, हालांकि, इस अवधारणा का एक सबूत के रूप में सेवा करने के लिए था के तरीके हैं रहा हूँ।

TransferStats उत्पन्न होते हैं और व्यक्तिगत हैंडलर के भीतर उपयोग किए जाते हैं, और इस समय हैंडलर द्वारा ढेर तक उपलब्ध नहीं कराए जाते हैं। नतीजतन वे ढेर पर रखे गए आक्रमणकारी मध्यवर्ती क्षेत्रों में खपत के लिए उपलब्ध नहीं हैं।

+0

हस्तांतरण आंकड़ों को लागू करने के लिए उपरोक्त कोड द्वारा उपयोग करने के लिए कोई विचार कैसे? – KingKongFrog

+0

आपके प्रश्न को दर्शाने के लिए संपादित उत्तर। –

+0

मुझे अभी भी नहीं मिलता है कि मैं हैंडलर को ट्रांसफर्टटाइम कैसे भेज सकता हूं ताकि यह एक ही आउटपुट में हो सके? उदाहरण के लिए: 'नया संदेशफॉर्मेटर (' {req_body} - {res_body} - {REQUEST_TIME} ') ' – KingKongFrog

संबंधित मुद्दे