错误日志在Guzzle http的Laravel中被截断

错误日志在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::

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::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,你能在这里发布代码更改吗,这样任何人都可以得到这个问题的帮助