【问题标题】:laravel change error report without messing in base code?laravel 更改错误报告而不会弄乱基本代码?
【发布时间】:2016-04-28 10:32:53
【问题描述】:

这是我在堆栈溢出中的第一篇文章,所以如果我做错了什么,请通知我。

所以,我正在为客户开发一个平台,而我们在交付阶段的时间很短,因此,为了及时完成所有工作,我想更改生产中的错误报告级别。

为了实现这一点,我去了:vendor > laravel > framework > src > Illuminate > Foundation > Bootstrap > HandleExceptions.php - Line : 27 ( I think ) 并替换:

error_reporting(-1);

set_error_handler([$this, 'handleError']);

set_exception_handler([$this, 'handleException']);

register_shutdown_function([$this, 'handleShutdown']);

作者:

if(env('APP_DEBUG') == true) {
    error_reporting(-1);

    set_error_handler([$this, 'handleError']);

    set_exception_handler([$this, 'handleException']);

    register_shutdown_function([$this, 'handleShutdown']);

}else{
    set_error_handler(null);
    set_exception_handler(null);
}

一切都像一个魅力,但我想检查我的良好做法,并完全避免与基本代码混淆。

任何人都对我如何覆盖此错误报告有一个建议(除了在每个刀片布局上都这样做 - 我希望将代码重复降至最低)

继续提问: - 我想 set_error_handler(null);set_exception_handler(null); - 原因是:我们按时完成了一个复杂的项目(很多关系) - 我已经通过在框架本身或每个刀片页面中声明它来解决问题。但是为了保持良好的编码习惯,我不想弄乱框架,我想避免代码重复。

提前感谢您的帮助。

【问题讨论】:

  • 大多数人会认为抑制错误和“保持良好的编码习惯”是相互排斥的。
  • 当然,但让我们这样吧。在这一点上,我有一个平台,在 2 周内实现了几乎 500 种方法。我们和客户同意关闭错误报告,因为他明确表示必须让最小可行产品工作。所以我们保留了那部分
  • 抑制错误不会将损坏的产品更改为最低限度的可行产品,它只会使其成为损坏的产品,甚至不会告诉您何时失败。可以说,情况更糟!
  • 你使用的是哪个版本的 Laravel?
  • Right Nick 我无法反驳这一点,但仅仅因为我在 stackoverflow 上的声誉为零,这并不意味着我暂时不会进入这个游戏。我从事专业编码已有 9 年多的时间,还有其他一些时间,因为我非常喜欢它,我完全知道你在这一点上告诉我的一切。那就是说:客户想要向有限的观众展示这个,他想要展示平台正在运行,他们想要看到它正在运行并且屏幕显示充满错误,因为例如未定义的偏移量,这是一个主要的关闭点.

标签: php laravel error-handling


【解决方案1】:

我认为你可以使用 laravel 的 App:error 来处理错误。

在你的 app/start/global.php 上,你可以这样写:

App::error(function(Exception $exception)
{
    Log::error($exception);
});

你可以处理来自 laravel 的所有错误,并在它们发生时做任何你想做的事情。

您将在https://laravel.com/docs/4.2/errors#handling-errors 获得更多信息

更新:此版本适用于 laravel 5.0

public function report(Exception $e)
{
    if ($e instanceof CustomException) {
        //
    }

    return parent::report($e);
}

您将在https://laravel.com/docs/5.0/errors#handling-errors 获得更多信息

【讨论】:

  • 已经试过了,没有一个能用。我继续有未定义的偏移异常
【解决方案2】:

您可能知道,PHP 中有各种不同类型的错误:http://php.net/manual/en/errorfunc.constants.php

对于致命/不可恢复的错误,您可能希望保留 Laravel 错误处理。另一种选择是您的用户只是看到一个空白的白页,这根本没有帮助,所以我建议您保留实际的错误和异常处理程序不变。

error_reporting() 函数改变了哪些错误被报告。 Laravel 使用的-1 的值表示报告所有错误。当您通过修改绕过该行时,错误报告级别将回退到您的 php.ini 配置中设置的任何内容。您希望将错误报告设置为始终处于此级别。

那么,如何覆盖 Laravel 设置的 error_reporting 的级别?

您可以在 Laravel 之后再次调用 error_reporting(),并将其设置为您想要的任何级别。听起来你可能想要这样的东西:

error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED & ~E_WARNING);

你应该把它放在哪里?

它将运行的任何地方之后 Laravel 已经设置了它的错误报告,之前你的错误代码运行。确切的位置可能会有所不同,具体取决于 Laravel 的版本。对于 5.x,也许在 AppServiceProviderboot() 方法中?

【讨论】:

  • 现在这就是我想听到的答案。我正在运行 5.2。我会在启动后尝试并将您的答案设置为已接受(如果可行)
猜你喜欢
  • 2014-10-16
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多