我在laravel 5.3 log
中有这个条目2016-12-22 17:23:37] local.ERROR: GuzzleHttp \ Exception \ ClientException:客户端错误:
POST https://api.sparkpost.com/api/v1/transmissions
导致400 Bad Request
响应:{"错误":[{" message":"消息代 被拒绝","描述":"由于受到抑制的收件人地址 客户p(截断...)
为什么会截断一条重要的错误消息?现在我无法弄清楚出了什么问题......
答案 0 :(得分:8)
截断是由Guzzle库完成的。它仅显示响应的前120个字符。我假设这是因为回复可能会很长。
如果您想查看完整的消息,您应该能够自定义处理guzzle异常的方式。
将Application.Run
中的report()
方法更新为:
app/Exceptions/Handler.php
注意:这是在public function report(Exception $exception)
{
// this is from the parent method
if ($this->shouldntReport($exception)) {
return;
}
// this is from the parent method
try {
$logger = $this->container->make(\Psr\Log\LoggerInterface::class);
} catch (Exception $ex) {
throw $exception; // throw the original exception
}
// this is the new custom handling of guzzle exceptions
if ($exception instanceof \GuzzleHttp\Exception\RequestException) {
// get the full text of the exception (including stack trace),
// and replace the original message (possibly truncated),
// with the full text of the entire response body.
$message = str_replace(
rtrim($exception->getMessage()),
(string) $exception->getResponse()->getBody(),
(string) $exception
);
// log your new custom guzzle error message
return $logger->error($message);
}
// make sure to still log non-guzzle exceptions
$logger->error($exception);
}
方法中完成的,因此它只会影响写入日志的内容。如果将异常转储到终端或浏览器,它仍将显示截断的消息。
答案 1 :(得分:8)
作为替代解决方案:
修补程序RequestException.php
ta_integration/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
替换
$size = $body->getSize();
$summary = $body->read(120);
$body->rewind();
if ($size > 120) {
例如:
$size = $body->getSize();
$summary = $body->read(999);
$body->rewind();
if ($size > 999) {
功能
getResponseBodySummary
答案 2 :(得分:2)
这些解决方案都没有帮助我。我找到了一个有用的解决方案here。由用户sidk2020。如果链接断开,这是他的解决方案:
我做了一些非常冒险的事情。我修改了guzzel的异常处理程序
guzzel只能读取120字节的信息,并在其旁边截断打印。
该文件位于:/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
所以我修改了该函数,下面是我的函数的样子:
{{1}}
答案 3 :(得分:2)
编辑vendor/guzzlehttp/psr7/src/Message.php
public static function bodySummary(MessageInterface $message, $truncateAt = 999)
编辑vendor/guzzlehttp/psr7/src/functions.php
function get_message_body_summary(MessageInterface $message, $truncateAt = 999)
答案 4 :(得分:1)
因为您的请求会引发Guzzle异常(作为一种解决方法),而不是调用File.open("score_sorted.txt", "w+") { |f| f.puts score_sorted }
,所以您可以尝试:
$e->getMessage()
如果您不想修改report()方法。
对我很好。