【问题标题】:Remove stack trace from Laravel error page从 Laravel 错误页面中删除堆栈跟踪
【发布时间】:2022-01-28 02:32:55
【问题描述】:

如何删除 Laravel 默认使用的冗长堆栈跟踪错误? (我知道它使用的是“点火”)

我发现一些没有帮助的资源:

  • this thread 只提到了如何完全禁用错误报告
  • 当我在 app/Exceptions/Handler.php 中的 render() 方法中写任何东西时,就像提到的 here 一样,我只会得到错误 500 而没有任何输出。
  • person in this thread 甚至建议编写自己的 Laravel 引导应用程序而不是使用默认的应用程序,这会破坏 Laravel 框架语义,但这简直是疯了。

我还尝试通过发布点火配置文件来查看 Ignition 的配置值

php artisan vendor:publish --provider="Facade\Ignition\IgnitionServiceProvider" --tag="ignition-config"

但是该文件没有什么可配置的,你唯一能做的就是在错误中隐藏“共享”消息。

我只想要一个简单的经典 php 错误页面,其中包含文件/行/错误、没有堆栈跟踪或 没有 html 标记。错误页面使得在 Web 浏览器以外的任何其他设备中调试输出变得非常困难。

【问题讨论】:

  • 您在异常处理程序的render() 方法中写了什么导致错误?您可以删除 Ignition 包,尽管它会退回到 Whoops。
  • 如果您要返回 HTML 页面,是的,它们通常很难在 Web 浏览器之外进行调试。您在做什么会在 Web 浏览器的上下文之外返回 HTML?
  • 视情况而定;要么是通过 shell 命令测试某些东西,要么是通过 curl (lighthouse-php.com/master/digging-deeper/…) 调试对 Lighthouse 的原始请求,或者使用像 ARC/PostMan 这样的请求模拟应用程序,确实有很多情况。实际上,除了经典的网络浏览器之外,我更经常地在其他所有东西上进行调试,尤其是如果你正在编写后端

标签: php laravel laravel-8 ignition


【解决方案1】:

只需在应用的异常处理程序中覆盖 render() 方法。对于 the base class 中的每个 cmets,此方法必须返回一个响应对象。

public function render($request, \Throwable $e)
{
    return response()->view("exception", ["exception" => $e]);
}

然后让你的刀片视图看起来像你想要的那样。

<!doctype html>
<title>Exception</title>
<body>
<p>
Exception of type <code>{{ get_class($exception) }}</code>
thrown in <code>{{ $exception->getFile() }}</code>
on line <code>{{ $exception->getLine() }}</code>.
</p>
</body>

【讨论】:

  • 哦,谢谢!找不到它需要response(),这就是为什么我不断收到错误 500
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 2011-12-29
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多