0

laravel クエリをログに記録したいと思います。次のコードを使用して、laravel クエリをリッスンできることを知っています。

Event::listen('illuminate.query', function ($query, $bindings, $time, $name) {
    // Log queries
};

上記のコードを職人のコマンドに配置して、このプログラムが実行されているときにのみクエリをリッスンし、常にではないようにしたいと思います。次のコードを書きました。

<?php
// ... namespace and use statements

class QueryListener extends Command
{
    protected $signature = 'pots:query-listen';
    protected $description = 'Runs forever and logs all database queries.';

    public function __construct()
    {
        parent::__construct();
    }

    private function logDatabaseQueries()
    {
        Event::listen('illuminate.query', function ($query, $bindings, $time, $name) {
            Log::info(PHP_EOL.$query.PHP_EOL);
        });
    }

    public function handle()
    {
        $this->logDatabaseQueries();

        echo 'Listening for database queries: Type \'stop\' to stop execution.'.PHP_EOL;
        $stopExecution = false;

        while ($stopExecution === false) {
            $handle = fopen('php://stdin', 'r');
            $line = fgets($handle);

            if (strtolower(trim($line)) === 'stop') {
                fclose($handle);
                echo 'Aborting script.'.PHP_EOL;
                $stopExecution = true;
            }
        }
    }
}

artisanを使用してこのコマンドを実行するとすぐに、logDatabaseQueries()メソッドがイベントのリッスンを開始することを期待していました。ただし、クエリ イベントをまったく受信しないため、これは機能しません。私は正しい方向に考えていますか?

4

2 に答える 2

4

これを使用して DB クエリをリッスンできます。

DB::listen(function($query) { 

  // Log this
  \Log::info($query->sql); 


});
于 2016-06-06T06:10:45.370 に答える