错误日志在Guzzle http的Laravel中被截断
Guzzle http正在截断超过120个字符的异常,但我需要记录完整的异常消息。我该怎么做错误日志在Guzzle http的Laravel中被截断,laravel,guzzlehttp,Laravel,Guzzlehttp,Guzzle http正在截断超过120个字符的异常,但我需要记录完整的异常消息。我该怎么做 我使用的是laravel 4.2.22。它与laravel 5和4相同 try { $response = $client->post($path, $params); } catch (\GuzzleHttp\Exception\RequestException $ex) { \Log::debug('error'); \Log::
我使用的是laravel 4.2.22。它与laravel 5和4相同
try {
$response = $client->post($path, $params);
} catch (\GuzzleHttp\Exception\RequestException $ex) {
\Log::debug('error');
\Log::debug((string) $ex->getResponse()->getBody());
throw $ex;
}
如果您只需转到$ex->getMessage()
,您将获得
(截断…
最后。可能是更好的解决方案:
try {
// do request here like:
// return $client->post($path, $params);
} catch (\GuzzleHttp\Exception\ServerException $ex) {
$exFactoryWithFullBody = new class('', $ex->getRequest()) extends \GuzzleHttp\Exception\RequestException {
public static function getResponseBodySummary(ResponseInterface $response)
{
return $response->getBody()->getContents();
}
};
throw $exFactoryWithFullBody->create($ex->getRequest(), $ex->getResponse());
}
要捕获的异常应该是
GuzzleHttp\Exception\RequestException
,而不是原始的异常
,这样它将正确自动完成,而不会捕获会导致上述方法失败的错误。请您解释一下,“自动正确完成”是什么,以及“上述方法如何失败”?当然,基本上,getResponse()
方法不是Exception
类可用的标准方法的一部分。这是Guzzle的延伸。如果抛出的异常不是具有该方法的类型,则会得到一个method not found异常。在捕获正确错误时自动完成方面,IDE知道哪些方法可用,并会在可用方法列表中建议getResponse。谢谢。您是对的,这段代码将创建意外的异常抑制。我已经更改了代码。@YevGeniyafanasysev,你能在这里发布代码更改吗,这样任何人都可以得到这个问题的帮助