web-dev-qa-db-fra.com

Comment enregistrez-vous tous les appels d'API à l'aide de Guzzle 6

J'essaie d'utiliser guzzle 6 qui fonctionne bien, mais je suis perdu en ce qui concerne la façon de consigner tous les appels api. Je voudrais simplement enregistrer le calendrier, l'utilisateur connecté de la session, l'URL et toute autre information pertinente habituelle liée à l'appel de l'API. Je n'arrive pas à trouver de documentation pour Guzzle 6 qui se réfère à cela, seulement Guzzle 3 (où ils ont changé l'appel addSubscriber de journalisation). Voici comment sont mes appels d'API actuels:

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

Vous pouvez utiliser n'importe quel enregistreur qui implémente l'interface PSR-3 avec Guzzle 6

J'ai utilisé Monolog comme enregistreur et middleware intégré de Guzzle avec MessageFormatter dans l'exemple ci-dessous.

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

Les détails sur le middleware de journal et le formateur de messages n'ont pas encore été bien documentés. Mais vous pouvez vérifier la liste quelles variables vous pouvez utiliser dans MessageFormatter

Il y a aussi un guzzle-logmiddleware qui vous permet de personnaliser le formateur, etc.

38
velioglu

@KingKongFrog C'est le moyen de spécifier le nom du fichier journal

$logger = new Logger('MyLog');
$logger->pushHandler(new StreamHandler(__DIR__ . '/test.log'), Logger::DEBUG);

$stack->Push(Middleware::log(
$logger,
new MessageFormatter('{req_body} - {res_body}')
));
6
anhduc.bkhn