Laravel 5.3 - How to log all queries on a page?

后端 未结 7 1481
生来不讨喜
生来不讨喜 2020-12-24 12:48

My team and I are working on a rather big project. There\'s queries going on everywhere - in controllers, in view composers in views (lazy loading) and probably in some othe

相关标签:
7条回答
  • 2020-12-24 13:24

    add a middleware that executes after the request is done and logs your queries ... see Terminable Middlwares

    0 讨论(0)
  • 2020-12-24 13:30

    If you want to print a query which is executed on your app do following steps.

    Step1: Go to your AppServiceProvider.php file. // File path App\Providers\AppServiceProvider.php

    Step2: Make boot() method and paste below code.

    public function boot() {
            // Log queries
            if (true) {
                \DB::listen(function ($query) {
                    \Log::info(
                        $query->sql, $query->bindings, $query->time
                    );
                });
            }
        }
    

    Step3: Now you can see you queries in lumen.log or laravel.log file. File path is laravel_app\storage\logs\laravel.log or lumen.log.

    Enjoy....

    0 讨论(0)
  • 2020-12-24 13:34

    You can add this to the Providers/AppServiceProvider.php file and check them in the laravel log file with tail:

    tail -f storage/logs/laravel.log
    

    You can even filter with queries you want to log. For example, here I was using Laravel Passport, and didn't want to log all the oauth queries.

    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));
                }
            });
        }
    }
    
    0 讨论(0)
  • 2020-12-24 13:36

    Are you using MySQL? You can just tail the log.

    How to show the last queries executed on MySQL?

    Or use the Laravel Debug Bar?

    0 讨论(0)
  • 2020-12-24 13:38

    Here comes the perfect example:

    https://laravel.com/docs/5.3/database#listening-for-query-events

    Open app\Providers\AppServiceProvider.php and add the following to Boot() function:

    DB::listen(function ($query) {
        var_dump([
            $query->sql,
            $query->bindings,
            $query->time
        ]);
    });
    
    0 讨论(0)
  • 2020-12-24 13:39

    Additioanlly There's package available also:

    log-my-queries

    https://packagist.org/packages/technoknol/log-my-queries

    Just install and add it's entry to middleware. It will log all the queries in laravel.log default log file.

    0 讨论(0)
提交回复
热议问题