Реализуйте слабину с помощью журналов laravel

#php #laravel #slack

Вопрос:

Я просто реализую слабину для журналов в Laravel следующим образом:

в logging.php

 'default' => env('LOG_CHANNEL', 'slack'),

'slack' => [
    'driver' => 'slack',
    'url' => env('LOG_SLACK_WEBHOOK_URL', 'https://hooks.slack.com/services/xxxx/xx'),
    'username' => 'Laravel Log',
    'emoji' => ':boom:',
    'level' => env('LOG_LEVEL', 'critical'),
],
 

В Handler.php я просто добавляю:

 public function report(Throwable $exception)
{
    Log::channel('slack')->critical($exception);
} 
 

всякий раз, когда я посещаю любую ссылку маршрута в своем приложении, я получаю эту ошибку в slack!

 SymfonyComponentHttpKernelExceptionNotFoundHttpException in /Users/Ali/Documents/Sites/asu-admin/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php:43
Stack trace:
#0 /Users/Ali/Documents/Sites/asu-admin/vendor/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php(144): IlluminateRoutingAbstractRouteCollection->handleMatchedRoute(Object(IlluminateHttpRequest), NULL)
#1 /Users/Ali/Documents/Sites/asu-admin/vendor/laravel/framework/src/Illuminate/Routing/Router.php(647): IlluminateRoutingCompiledRouteCollection->match(Object(IlluminateHttpRequest))
#2 /Users/Ali/Documents/Sites/asu-admin/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): IlluminateRoutingRouter->findRoute(Object(IlluminateHttpRequest))
 

Я просто очищаю маршрут и маршрут:кэш и все, что связано, но все равно, при каждом посещении любого маршрута это исключение замедляется!

Ответ №1:

Реальность такова, что эти исключения, вероятно, существовали всегда. Вот выдержка из встроенного обработчика ошибок Laravel:

 protected $internalDontReport = [
        AuthenticationException::class,
        AuthorizationException::class,
        HttpException::class,
        HttpResponseException::class,
        ModelNotFoundException::class,
        MultipleRecordsFoundException::class,
        RecordsNotFoundException::class,
        SuspiciousOperationException::class,
        TokenMismatchException::class,
        ValidationException::class,
    ];
 

и это используется в

     protected function shouldntReport(Throwable $e)
    {
        $dontReport = array_merge($this->dontReport, $this->internalDontReport);

        return ! is_null(Arr::first($dontReport, function ($type) use ($e) {
            return $e instanceof $type;
        }));
    }
 

поэтому для того, чтобы вы могли правильно сообщать об исключениях таким же образом, вам нужно сделать что-то вроде:

 public function report(Throwable $exception)
{
    if ($this->shoudntReport($exception) { return; }
    Log::channel('slack')->critical($exception);
} 
 

В качестве примечания 404 исключения случаются постоянно. Когда я загружаю страницу, браузер часто пробует разные вещи, такие как загрузка фавикона или страницы manifest.json поиска search.xml и другие подобные вещи, иногда потому, что мы добавляем метаданные в наш шаблон, а затем забываем добавить фактические файлы, а в других случаях, потому что браузер пытается быть «умным» в этом.

Если вы хотите устранить эти исключения, вам нужно сначала выяснить, какая страница не найдена. Вероятно, это не само действие маршрута, иначе вы узнали бы об этом из ответа.

Комментарии:

1. Спасибо! как я могу игнорировать 404, когда, как я посещаю маршрут, которого не существует, все равно бросьте мне исключение в slack!

2. @user16390519 Я не рекомендую этого делать, иначе, как только у вас появится общедоступный веб-сайт, ваша слабина будет затоплена ботами, пытающимися использовать известные эксплойты.

3. Мое приложение-это просто API для Vue.js проект!