我想记录 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()
方法将开始侦听事件。但是,这不起作用,因为我从未收到任何查询事件。我在思考正确的方向吗?