phpguzzleguzzle6

How do you log all API calls using Guzzle 6


I'm trying to use guzzle 6 which works fine but I'm lost when it comes to how to log all the api calls. I would like to simply log timing, logged in user from session, url and any other usual pertinent info that has to do with the API call. I can't seem to find any documentation for Guzzle 6 that refers to this, only guzzle 3 (Where they've changed the logging addSubscriber call). This is how my current API calls are:

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

Solution

  • You can use any logger which implements PSR-3 interface with Guzzle 6

    I used Monolog as logger and builtin middleware of Guzzle with MessageFormatter in below example.

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

    The details about the log middleware and message formatter has not well documented yet. But you can check the list which variables you can use in MessageFormatter

    Also there is a guzzle-logmiddleware which allows you to customize formatter etc.