Как регистрировать дБ запросы в Lumen5.7? - PullRequest
0 голосов
/ 11 ноября 2018

Я обновляю Lumen с 5,4 до 5,7 и хочу иметь возможность регистрировать запросы к базе данных для отладки.

Вот конф / исходный код. Я должен использовать псевдоним ' LumenDB ' из-за конфликта имен сторонней библиотеки.

Я ожидаю, что запрос может быть зарегистрирован, но я не вижу их в lumen.log.

MyApplication.php

<?php

namespace App;

use Illuminate\Support\Facades\Facade;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger;

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');
        }
    }

    protected function registerLogBindings()
    {
        $this->singleton('Psr\Log\LoggerInterface', function () {
            return new Logger('lumen', $this->getMonologHandler());
        });
    }

    protected function getMonologHandler()
    {
        $maxFiles = 7;
        $rotatingLogHandler = new RotatingFileHandler(storage_path('logs/lumen.log'), $maxFiles);
        $rotatingLogHandler->setFormatter(new LineFormatter(null, null, true, true));
        $handlers = [];
        $handlers[] = $rotatingLogHandler;
        return $handlers;
    }
}

самозагрузки / app.php

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



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

Приложение / Провайдеры / AppServiceProvider.php

use Illuminate\Support\Facades\DB;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        DB::listen(function ($query) {
            // $query->sql
            // $query->bindings
            // $query->time
            Log::info("-------");
            Log::info($query->sql);
        });
    }

Запрос выполняется внутри метода Service, который вызывается командой, назначенной cron.

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

1 Ответ

0 голосов
/ 12 ноября 2018

Вы не зарегистрировали AppServiceProvider в вашем bootstrap/app.php. Из-за этого метод boot в вашем AppServiceProvider никогда не регистрируется и, следовательно, регистрация никогда не выполняется.

Вы должны изменить app.php на следующее:

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

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

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