Как регистрировать ошибки с жрет? - PullRequest
0 голосов
/ 08 октября 2018

Я планирую использовать Guzzle для связи с существующим REST API.Я хотел бы регистрировать все неудачные вызовы API с монологом.

Когда вызов API не успешен (код состояния HTTP отличается от ожидаемого), мне нужно зарегистрировать ошибку, чтобы кто-то мог посмотреть на нее и исправить проблему.

Мне удалосьвключите, отключите исключения, используя 'http_errors' => false, чтобы мне не приходилось перехватывать несколько исключений (для кодов 4XX, 5XX и т. д.).Я также заменил вызовы $client->post() на экземпляр new Request('POST'), чтобы получить объект запроса при неудачном вызове API.

Теперь у меня остается следующий код:

$request = new Request('POST', 'vouchers');
$response = $this->client->send($request, ['json' => $info]);

if ($response->getStatusCode() != 201) {
    $this->log->error('Voucher was not created.', [
        'request' => [
            'headers' => $request->getHeaders(),
            'uri' => $request->getUri()->__toString(),
            'method' => $request->getMethod(),
            'body' => $request->getBody(),
        ],
        'response' => [
            'code' => $response->getStatusCode(),
            'status' => $response->getReasonPhrase(),
            'headers' => $response->getHeaders(),
            'body' => $response->getBody(),
        ],
    ]);
}

Это приводит кследующая запись в журнале.

{
   "request":{
      "headers":[

      ],
      "uri":"vouchers",
      "method":"POST",
      "body":"[object] (GuzzleHttp\\Psr7\\Stream: )"
   },
   "response":{
      "code":404,
      "status":"Not Found",
      "headers":{
         "Server":[
            "openresty"
         ],
         "Date":[
            "Mon, 08 Oct 2018 10:28:53 GMT"
         ],
         "Content-Type":[
            "text/html;charset=UTF-8"
         ],
         "Content-Length":[
            "915"
         ],
         "Connection":[
            "keep-alive"
         ],
         "Vary":[
            "Accept-Encoding"
         ]
      },
      "body":"<body of the response>"
     }
}

Это не очень полезно для меня, так как заголовки запроса отсутствуют (возможно, потому что заголовки были вставлены Guzzle , а не мной при создании экземпляраОбъект запроса).URI также не является абсолютным, и тело также непригодно для использования.

Да, я мог бы создать тело вручную, используя json_encode(), и также разрешить URI вручную, но это привело бы к еще большему количеству несвязанного с бизнесом кода.


Можно ли зарегистрировать всю информацию о запросах и ответах с Guzzle без беспорядочного и длинного кода для простого извлечения информации из Guzzle объекты?

...