Laravel 5.3 - How to log all queries on a page?
我和我的团队正在进行一个相当大的项目。到处都有查询——在控制器中,在视图中的视图组合器中(延迟加载),以及可能在其他一些服务中。现在很难跟踪所有这些内容,页面加载速度也相当慢。
我将把db::EnableQueryLog()和db::GetQueryLog()放在哪里记录并转储所有查询?基本上,我在代码中寻找在任何查询发生之前发生的位置(放置enableQueryLog()),我在寻找在视图呈现之后发生的位置(转储getQueryLog())。
解决这个问题的好方法是什么?
事先谢谢。
下面是一个完美的例子:
https://laravel.com/docs/5.3/database监听查询事件
打开appprovidersappserviceprovider.php,将以下内容添加到
1 2 3 4 5 6 7 |
您可以将其添加到providers/appserviceprovider.php文件中,并在laravel日志文件中用tail检查它们:
1 |
号
甚至可以使用要记录的查询进行筛选。例如,这里我使用的是LaravelPassport,不想记录所有OAuth查询。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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)); } }); } } |
将此代码放在执行查询的代码的正上方
1 2 3 | \DB::listen(function($sql) { die(\Illuminate\Support\Str::replaceArray('?', $sql->bindings, $sql->sql)); }); |
如果要打印在应用程序上执行的查询,请执行以下步骤。
步骤1:转到AppServiceProvider.php文件。//文件路径appprovidersappserviceprovider.php
步骤2:生成boot()方法并粘贴到下面的代码。
1 2 3 4 5 6 7 8 9 10 |
。
步骤3:现在您可以在lumen.log或laravel.log文件中看到查询。文件路径为laravel_appstoragelogslaravel.log或lumen.log。
享受……
此外,还提供套餐:
记录我的查询https://packagist.org/packages/technoknol/log-my-queries
只需安装并将其条目添加到中间件。它将把所有查询记录在
你在使用MySQL吗?你只需跟踪日志。
如何显示MySQL上最后执行的查询?
或者使用Laravel调试栏?
添加在请求完成后执行的中间件并记录查询…参见可终止的Middlware