#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 проект!