Laravel 5.7 Как войти 404 с URL - PullRequest
       24

Laravel 5.7 Как войти 404 с URL

0 голосов
/ 27 января 2019

Я хочу зарегистрировать 404 ошибки в Laravel 5.7, но я не понимаю, как это включить.В дополнение к регистрации 404 ошибок, я хотел бы зарегистрировать запрошенный URL.Другие ошибки регистрируются правильно.

.env

APP_DEBUG=true
LOG_CHANNEL=stack

config / logging.php

'stack' => [
    'driver' => 'stack',
    'channels' => ['daily'],
],

Per Документация по обработке ошибок :

Свойство $ dontReport обработчика исключений содержит массив типов исключений, которые не будут регистрироваться.Например, исключения, возникающие из-за ошибок 404, а также нескольких других типов ошибок, не записываются в ваши файлы журнала.При необходимости вы можете добавить другие типы исключений в этот массив:

В app/Exceptions/Handler массив $dontReport пуст.

Я настроил представление 404, имея файл Bladeresources/views/errors/404.blade.php

На основании этого ответа Я пробовал этот код в app/Exceptions/Handler,, но в журналах ничего не отображается:

public function report(Exception $exception)
{
    if ($this->isHttpException($exception)) {
        if ($exception instanceof NotFoundHttpException) {
            Log::warning($message);
            return response()->view('error.404', [], 404);
        }
        return $this->renderHttpException($exception);
    }

    parent::report($exception);
}

ОБНОВЛЕНИЕпосле принятия ответа Мозаммила, который работает отлично. Я сократил его ответ до следующего.Не забудьте добавить use Illuminate\Support\Facades\Log в файл обработчика.

public function render($request, Exception $exception)
{
    if ($exception instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
        Log::warning('404: ' . $request->url());
        return response()->view('errors.404', [], 404);
    }
    return parent::render($request, $exception);
}

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Я использую телескоп

Телескоп Laravel
Телескоп Laravel - это элегантный помощник для отладки каркаса Laravel.Телескоп обеспечивает понимание запросов, поступающих в ваше приложение, исключений, записей журнала, запросов к базе данных, заданий в очереди, почты, уведомлений, операций кэширования, запланированных задач, дампов переменных и т. Д.

https://laravel.com/docs/5.7/telescope

0 голосов
/ 27 января 2019

У меня аналогичное требование.Вот как я этого добился.

У меня есть вспомогательный метод, чтобы определить, является ли он 404.

private function is404($exception)
{
    return $exception instanceof \Illuminate\Database\Eloquent\ModelNotFoundException
            || $exception instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
}

У меня также есть другой метод для регистрации 404.

private function log404($request) 
{
    $error = [
        'url'    => $request->url(),
        'method' => $request->method(),
        'data'   => $request->all(),
    ];

    $message = '404: ' . $error['url'] . "\n" . json_encode($error, JSON_PRETTY_PRINT);

    Log::debug($message);
}

Затем, чтобызапишите ошибку, я просто делаю что-то подобное в методе render():

public function render($request, Exception $exception)
{
    if($this->is404($exception)) {
        $this->log404($request);
    }

    return parent::render($request, $exception);
}

Я не знал о $internalDontReport.Однако во всех случаях моя реализация работала на меня :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...