在laravel 5.3

时间:2016-12-22 23:18:15

标签: php laravel logging

我在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(截断...)

为什么会截断一条重要的错误消息?现在我无法弄清楚出了什么问题......

5 个答案:

答案 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()方法。

对我很好。