Я хотел бы регистрировать запросы 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()
начнет отслеживать события. Однако это не работает, потому что я никогда не получаю никаких событий запроса. Я думаю в правильном направлении?