如何在 lumen 5.7 中记录 api 的所有查询

how log all queries of api in lumen 5.7

我需要查看在 api 中执行的所有查询。 我尝试了 3 种方法,但 none 有效

1:

\Illuminate\Support\Facades\DB::listen(function ($query) {
     Log::info($query->sql, ['Bindings' => $query->bindings, 'Time' => $query->time]);
});

监听方法不存在。

2:

Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
    Log::debug($query->sql . ' - ' . serialize($query->bindings));
});

这个也没用。

3:

DB::connection("mysql2")->enableQueryLog();
DB::connection("mysql2")->getQueryLog();

我把 1 和 2 放在 bootstrap/app.php 中,第三个放在 api 控制器中。

I should mention that i have different databases.

还有其他方法吗?

您可以尝试使用 terminable middleware 中的第三种方法,例如:

namespace Illuminate\Session\Middleware;

use Closure;

class LogQueries
{
    public function handle($request, Closure $next)
    {
        DB::connection("mysql2")->enableQueryLog();
        return $next($request);
    }

    public function terminate($request, $response)
    {
        Log::info('Queries executed', DB::connection("mysql2")->getQueryLog());
        
    }
}

然后您可以在 app/bootstrap.php 中将其注册为:

$app->middleware([
   App\Http\Middleware\LogQueries::class
]);

这应该在请求开始时启用查询日志,然后在结束时记录所有查询。缺点是如果您执行许多大型查询(如长查询字符串中的大型查询),您将需要将它们保存在内存中直到请求结束,这可能并不理想。

注意:我不完全记得查询日志的数组结构,因此您可能需要调整日志步骤以更好地满足您的需求。