Моя команда и я работаем над довольно большим проектом. Запросы происходят повсюду – в контроллерах, в виду композиторов в представлениях (ленивая загрузка) и, возможно, в некоторых других сервисах. Сложно отслеживать все это, и скорость загрузки страницы на данный момент довольно медленная.
Где бы я поместил \ DB :: enableQueryLog () и \ DB :: getQueryLog (), чтобы регистрировать ВСЕ запросы и выгружать их? В основном я ищу какое-то место в коде, которое происходит до того, как произойдет какой-либо из запросов (поставить enableQueryLog ()), и я ищу место, которое происходит после рендеринга представлений (для дампа getQueryLog ()).
Что было бы хорошим путем?
Заранее спасибо.
Вот прекрасный пример:
https://laravel.com/docs/5.3/database#listening-for-query-events
Откройте приложение \ Providers \ AppServiceProvider.php и добавьте следующую функцию Boot()
:
DB::listen(function ($query) { var_dump([ $query->sql, $query->bindings, $query->time ]); });
Вы можете добавить это в файл Providers / AppServiceProvider.php и проверить их в файле журнала laravel с хвостом:
tail -f storage/logs/laravel.log
Вы можете даже фильтровать запросы, которые хотите записать. Например, здесь я использовал Laravel Passport и не хотел регистрировать все запросы oauth.
use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Log; public function register() { if (App::environment('local') && env('APP_URL') == 'http://localhost') { Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) { // filter oauth ones if (!str_contains($query->sql, 'oauth')) { Log::debug($query->sql . ' - ' . serialize($query->bindings)); } }); } }
добавьте промежуточное программное обеспечение, которое выполняется после выполнения запроса и регистрирует ваши запросы … см. Terminable Middlwares
Вы используете MySQL? Вы можете просто закрыть журнал.
Как показать последние запросы, выполняемые в MySQL?
Или использовать Laurvel Debug Bar?