返回

Laravel 10 中如何记录 404 错误:一个明确的指南

php

在 Laravel 10 中记录 404 错误:全面指南

引言

在 Web 应用程序开发中,处理 404 错误(即页面未找到错误)至关重要。它可以帮助你识别用户无法访问的页面,并采取适当的措施来解决问题。在本文中,我们将探索如何在 Laravel 10 中记录 404 错误,确保你的应用程序在出现此类错误时具有透明度和可追溯性。

默认行为

在 Laravel 10 中,默认情况下不会记录 404 错误。这种行为与 Laravel 的异常处理机制有关,该机制通常不会将 404 错误视为可报告的异常。

手动记录错误

为了记录 404 错误,需要手动修改 Laravel 的异常处理机制。以下是在 app/Exceptions/Handler.php 文件中添加自定义异常处理方法的步骤:

public function render($request, Throwable $exception)
{
    // 判断是否为 404 错误
    if ($exception instanceof NotFoundHttpException) {
        // 记录 404 错误
        Log::error($exception);
    }

    // 交给 Laravel 默认的异常处理程序处理其他异常
    return parent::render($request, $exception);
}

其他步骤

除了添加自定义异常处理方法外,还需要执行以下其他步骤来确保所有 404 错误都能正确记录:

  • NotFoundHttpException 添加到异常白名单

这将防止 Laravel 将 404 错误视为应用程序错误并将其记录在存储中。在 config/logging.php 文件中,将 NotFoundHttpException 添加到 exceptions 数组的白名单中:

'exceptions' => [
    'RenderException',
    'NotFoundHttpException',
    'ValidationException',
],
  • 通过中间件禁用 debug_blacklist

这将确保记录所有 404 错误,即使它们是由调试黑名单过滤掉的。在 app/Http/Kernel.php 文件中,在 web 中间件组中添加 DisableDebugBlacklist 中间件:

protected $middlewareGroups = [
    'web' => [
        ...
        \App\Http\Middleware\DisableDebugBlacklist::class,
        ...
    ],
];
  • 创建 DisableDebugBlacklist 中间件

此中间件将禁用调试黑名单,以便记录所有 404 错误:

namespace App\Http\Middleware;

use Closure;

class DisableDebugBlacklist
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 禁用调试黑名单
        config(['debugblacklist' => []]);

        return $next($request);
    }
}

重启应用程序

完成这些步骤后,需要重启 Laravel 应用程序,以便更改生效。

结论

通过遵循本文中概述的步骤,你可以有效地在 Laravel 10 中记录 404 错误。这将使你能够轻松跟踪和调试未找到的页面,从而提高应用程序的稳定性和用户体验。

常见问题解答

  1. 为什么默认情况下不会记录 404 错误?

    • 这是 Laravel 异常处理机制的结果,它通常不会将 404 错误视为可报告的异常。
  2. 除了手动记录错误之外,还有其他方法吗?

    • 不,手动记录是 Laravel 10 中记录 404 错误的唯一方法。
  3. 为什么要将 NotFoundHttpException 添加到异常白名单?

    • 这将防止 Laravel 将 404 错误视为应用程序错误并将其记录在存储中。
  4. DisableDebugBlacklist 中间件有什么作用?

    • 它会禁用调试黑名单,以便记录所有 404 错误,即使它们是由调试黑名单过滤掉的。
  5. 完成这些步骤后为什么需要重启应用程序?

    • 这是为了确保更改生效并开始记录 404 错误。