Как вы регистрируете все вызовы API с помощью Guzzle 6

Я пытаюсь использовать guzzle 6, который отлично работает, но я заблудился, когда дело доходит до того, как регистрировать все вызовы api. Я хотел бы просто регистрировать время, вошедшего в систему пользователя из сеанса, URL-адрес и любую другую обычную соответствующую информацию, которая имеет отношение к вызову API. Кажется, я не могу найти никакой документации для Guzzle 6, которая относится к этому, только guzzle 3 (где они изменили вызов addSubscriber для ведения журнала). Вот каковы мои текущие вызовы API:

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

person KingKongFrog    schedule 20.09.2015    source источник


Ответы (3)


Вы можете использовать любой логгер, реализующий интерфейс PSR-3 с Guzzle 6.

Я использовал Monolog в качестве регистратора и встроенное промежуточное ПО Guzzle с MessageFormatter в приведенном ниже примере.

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

Подробная информация о промежуточном программном обеспечении журнала и средстве форматирования сообщений еще недостаточно документирована. Но вы можете проверить список, какие переменные можно использовать в MessageFormatter.

Также существует guzzle-logmiddleware, которое позволяет настраивать форматировщик и т. Д.

person velioglu    schedule 20.09.2015
comment
Где вы указываете имя файла журнала в этом коде? Спасибо, что разместили это! - person KingKongFrog; 21.09.2015
comment
Я не ставил обработчик в пример. Вы можете выбрать, какой обработчик вы будете использовать в логгере. Если вы хотите записывать свои сообщения в файл, вам следует выбрать StreamHandler. см. документацию монолога для других вариантов. Вы можете передать обработчик при создании Logger или установить его после с помощью метода pushHandler. проверьте этот пример @ KingKongFrog - person velioglu; 22.09.2015
comment
Это сработало, как уже упоминалось! но @velioglu Не могли бы вы помочь сделать то же самое в laravel, где я использую однострочный вызов API, например $ response = Http :: withBody (json_encode ($ reqArray), 'application / json') - ›withToken ($ token) -› сообщение ($ SearchByNameApi); Я также задаю вопрос относительно этого stackoverflow.com/questions/67920040/ Я буду счастлив, если вы поможете мне добиться этого - person Vinay Kaithwas; 11.06.2021

@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}')
));
person anhduc.bkhn    schedule 30.08.2017

Для Guzzle 7 я сделал следующее:

require './guzzle_7.2.0.0/vendor/autoload.php';
require './monolog/vendor/autoload.php';

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Pool;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;

use GuzzleHttp\MessageFormatter;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

use GuzzleHttp\TransferStats;

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$logger = null;
$messageFormat = 
            //['REQUEST: ', 'METHOD: {method}', 'URL: {uri}', 'HTTP/{version}', 'HEADERS: {req_headers}', 'Payload: {req_body}', 'RESPONSE: ', 'STATUS: {code}', 'BODY: {res_body}'];
            'REQUEST: urldecode(req_body)';
$handlerStack = \GuzzleHttp\HandlerStack::create(); 
$handlerStack->push(createGuzzleLoggingMiddleware($messageFormat));
function getLogger() {
    global $logger;
    if ($logger==null) {
        $logger = new Logger('api-consumer');
        $logger->pushHandler(new \Monolog\Handler\RotatingFileHandler('./TataAigHealthErrorMiddlewarelog.txt'));
    }
    var_dump($logger);
    return $logger;
    }
function createGuzzleLoggingMiddleware(string $messageFormat){
    return \GuzzleHttp\Middleware::log(getLogger(), new \GuzzleHttp\MessageFormatter($messageFormat));
}

function createLoggingHandlerStack(array $messageFormats){  
    global $logger;
    $stack = \GuzzleHttp\HandlerStack::create();
    var_dump($logger);
    collect($messageFormats)->each(function ($messageFormat) use ($stack) {
        // We'll use unshift instead of push, to add the middleware to the bottom of the stack, not the top
        $stack->unshift(createGuzzleLoggingMiddleware($messageFormat) );
    });
    return $stack;
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

$client = new Client(['verify' => false, 'handler' => $tapMiddleware($handlerStack)]);

ВОТ ЭТО ДА !!

person Saurabh    schedule 02.11.2020