如何在 Laravel 10 中记录验证异常

How to Log Validation Exceptions in Laravel 10

提问人:BahaMagician 提问时间:9/6/2023 更新时间:9/6/2023 访问量:132

问:

我正在尝试追踪外部 API 向我的服务器发出请求的一个非常具体的问题。如何对异常处理程序进行更改,以便将请求验证异常记录在我的错误日志文件中?提前感谢您的任何帮助。

php laravel 异常 处理程序 laravel-10

评论

0赞 Mr. Kenneth 9/6/2023
你试过吗?你写了什么代码吗?Log::error("log text")
0赞 Maksim 9/6/2023
覆盖Handler.php中的$internalDontReport,并从此道具中删除此异常。
0赞 Alika Matthew 9/6/2023
我认为这是一个有效的问题。我不知道为什么它被否决了。

答:

1赞 Filano 9/6/2023 #1

自定义例外

php artisan make:exception

Doc Laravel 错误

Log::error('验证错误: ' . $exception->getMessage());

0赞 Alika Matthew 9/6/2023 #2

转到您的app/Exceptions/Handler.php

编辑方法:register

use Illuminate\Support\Facades\Log;
use Illuminate\Validation\ValidationException;
/**
 * Register the exception handling callbacks for the application.
 *
 * @return void
 */
public function register()
{
    $this->reportable(function (Throwable $e) {
        if ($e instanceof ValidationException) {
            Log::error($e->getMessage(), $this->buildExceptionContext($e));
        }
    });
}

现在,每当发生验证错误时,它都会写入您的日志,而不会更改向最终用户报告的方式。

评论

0赞 BahaMagician 9/6/2023
谢谢。我试过这个,但不幸的是,这在 Laravel 10 中不起作用。
1赞 BahaMagician 9/6/2023 #3

感谢您的所有答案,但我能够在这里找到答案:https://stackoverflow.com/a/73066132/9980193

这是我添加到Handler.php的方法:

use Illuminate\Validation\ValidationException;


 public function convertValidationExceptionToResponse(ValidationException $e, $request)
    {

        \Log::info([
            'errors' => $e->errors(),
            'request' => $request->all(),
        ]);

        return parent::convertValidationExceptionToResponse($e, $request);
    }