【问题标题】:Displaying the error in production mode with log number in laravel在 laravel 中使用日志号在生产模式下显示错误
【发布时间】:2020-05-14 17:20:16
【问题描述】:

我有一个内置于 laravel 5.8 的应用程序,它处于 生产模式。由于该网站是实时的,我不想向我们的用户显示任何错误。但是如果发生一些错误,那么我想要日志号或任何指示在该特定时间引发什么错误的参考。

所以我想知道是否有任何方法可以向我们的用户显示“糟糕,出现错误 ref#123456”。这样他们就可以向我们发送屏幕截图或参考编号,我们可以通过检查我们的日志文件来跟踪实际发生的情况。

提前致谢。编码愉快。

【问题讨论】:

  • 除此之外,我希望看到更多的 Web 应用程序做这样的事情。作为开发人员,尝试隔离日志中的请求将节省大量时间。而且,作为用户,它会让我更有信心(无论是对还是错),报告它实际上会解决一些问题。
  • tbh 听起来您应该更好地测试您的代码。修复导致此类错误的所有内容。使用像 Sentry.io 这样的错误跟踪器,或者自己定期检查日志。

标签: laravel logging error-handling eloquent runtime-error


【解决方案1】:

您可以将日志保存在数据库中并呈现其 ID。

您可以在App\Exceptions\Handler 中进行操作: https://laravel.com/docs/5.8/errors

例如:

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Throwable  $exception
     * @return \Symfony\Component\HttpFoundation\Response
     *
     * @throws \Throwable
     */
    public function render($request, Throwable $exception)
    {
        // Create log in db
        $log = Log::create([
            'message' => $exception->getMessage(), 
            'code' => $exception->getCode(),
            'line' => $exception->getLine(),
        ]);

        // Print log id in logs
        logger("LogId {$log->id}");

        //Return view error with log id
        return return response()->view('errors', ['logId' => $log->id]);
    }

【讨论】:

    【解决方案2】:

    也许你想要比记录异常更专业的东西,而 laravel 有一个很棒的包,名为望远镜,你得到了所有的异常和查询或事件 redis 等等。您可以授权用户只有管理员才能访问望远镜信息。并且因为它有很多信息,你可能想用一个 seceule 来修剪记录:

    $schedule->command('telescope:prune --hours=48')->daily();
    

    所有这些您都可以在文档中找到:https://laravel.com/docs/telescope

    【讨论】:

      【解决方案3】:

      应该像使用 uniqueid() 函数为异常创建一个 id 并在应用的渲染部分返回一个视图一样简单。

      public function render($request, Exception $exception)
      {
          $errorCode = uniqid('error_');
      
          Log::error("$errorCode", [
              //... The log information here
          ]);
      
          return view('welcome', compact('errorCode'));
      }
      

      作为上面的示例,我使用默认的welcome.blade.php 页面,然后显示以下内容:

      发生错误#error_5ec385d7c4d25

      这意味着您实际上可以在日志中搜索此错误代码以了解问题所在。

      【讨论】:

        猜你喜欢
        • 2020-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        • 2011-05-01
        相关资源
        最近更新 更多