Dev*_*evK 18 php laravel laravel-5.3
我和我的团队正在开展一个相当大的项目.随处可见的查询 - 在控制器中,在视图中的视图作曲家(延迟加载)以及可能在其他一些服务中.现在越来越难以跟踪这一切,目前页面加载速度相当慢.
我将把\ DB :: enableQueryLog()和\ DB :: getQueryLog()放在哪里记录所有查询并转储它们?基本上我正在寻找在任何查询发生之前发生的代码中的某个位置(放置enableQueryLog())并且我正在寻找在视图呈现之后发生的位置(转储getQueryLog()).
有什么好办法可以解决这个问题?
提前致谢.
Hud*_*ira 31
这是一个完美的例子:
https://laravel.com/docs/5.3/database#listening-for-query-events
打开app\Providers\AppServiceProvider.php并将以下内容添加到Boot()函数中:
DB::listen(function ($query) {
var_dump([
$query->sql,
$query->bindings,
$query->time
]);
});
Run Code Online (Sandbox Code Playgroud)
您可以将它添加到Providers/AppServiceProvider.php文件,并使用tail在laravel日志文件中检查它们:
tail -f storage/logs/laravel.log
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用要记录的查询进行过滤.例如,我在这里使用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));
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15350 次 |
| 最近记录: |