Ras*_*ash 0 php laravel laravel-5 laravel-events
我想记录 Laravel 查询。我知道我们可以使用以下代码来监听 Laravel 查询:
Event::listen('illuminate.query', function ($query, $bindings, $time, $name) {
// Log queries
};
Run Code Online (Sandbox Code Playgroud)
我想将上面的代码放在 artisan 命令中,以便我只在该程序运行时侦听查询,而不是一直侦听。我写了下面的代码。
<?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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的期望是,一旦我使用 运行此命令artisan,该logDatabaseQueries()方法就会开始侦听事件。但是,这不起作用,因为我从未收到任何查询事件。我的思考方向正确吗?
您可以使用以下命令监听数据库查询:
DB::listen(function($query) {
// Log this
\Log::info($query->sql);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2929 次 |
| 最近记录: |