dimanche 11 novembre 2018

How to log db queries in Lumen5.7?

I upgrade Lumen from 5.4 to 5.7, and I want to be able to log DB queries for debugging.

Here's the conf/source code. I have to use 'LumenDB' alias because of naming conflict of a third-party library.

I expect the query could be logged, but I can not see them in lumen.log.

MyApplication.php

class MyApplication extends \Laravel\Lumen\Application {
    public function withFacades($aliases = true, $userAliases = [])
    {
        Facade::setFacadeApplication($this);

        if (! static::$aliasesRegistered) {
            static::$aliasesRegistered = true;

            class_alias('Illuminate\Support\Facades\Auth', 'Auth');
            class_alias('Illuminate\Support\Facades\Cache', 'Cache');
            class_alias('Illuminate\Support\Facades\DB', 'LumenDB');
            class_alias('Illuminate\Support\Facades\Event', 'Event');
            class_alias('Illuminate\Support\Facades\Gate', 'Gate');
            class_alias('Illuminate\Support\Facades\Log', 'Log');
            class_alias('Illuminate\Support\Facades\Queue', 'Queue');
            class_alias('Illuminate\Support\Facades\Schema', 'Schema');
            class_alias('Illuminate\Support\Facades\Validator', 'Validator');
        }
    }

bootstrap/app.php

$app->register(App\Providers\EventServiceProvider::class);



\LumenDB::connection()->enableQueryLog();

app/Providers/AppServiceProvider.php

use Illuminate\Support\Facades\DB;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function ($query) {
            // $query->sql
            // $query->bindings
            // $query->time
            Log::info("-------");
            Log::info($query->sql);
        });
    }

The query is executed inside a Service method.

public function getAllStatsToday()
{
    $today = new \DateTime();
    $today->setTime(0, 0, 0);
    $productUsageStats = ProductUsageStat::make()
        ->where('updated_at', '>', $today);
    return $productUsageStats;
}



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire