如何在 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
]);
这应该在请求开始时启用查询日志,然后在结束时记录所有查询。缺点是如果您执行许多大型查询(如长查询字符串中的大型查询),您将需要将它们保存在内存中直到请求结束,这可能并不理想。
注意:我不完全记得查询日志的数组结构,因此您可能需要调整日志步骤以更好地满足您的需求。
我需要查看在 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
]);
这应该在请求开始时启用查询日志,然后在结束时记录所有查询。缺点是如果您执行许多大型查询(如长查询字符串中的大型查询),您将需要将它们保存在内存中直到请求结束,这可能并不理想。
注意:我不完全记得查询日志的数组结构,因此您可能需要调整日志步骤以更好地满足您的需求。