Laravel使用terminate记录API的响应时间,请求参数和响应值
Laravel 的中间件有一个叫做 terminate
的方法,如果我们实现了该方法,那么在 Laravel 整个生命周期执行快要结束的时候,Laravel 就会执行这个方法,方法结构如下:
public function terminate($request, $response)
{
}
它有两个参数,一个是 $request
,另外一个是 $response
。也就是本次请求的参数和响应值了。我们可以利用这个方法来记录API的处理时间和请求参数,响应值。
这里,我们定义一个中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use App\Models\ApiResponseRecord;
class ApiResponseTimeMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate($request, $response)
{
$startTime = LARAVEL_START * 10000;
$endTime = microtime(true) * 10000;
ApiResponseRecord::create([
'api' => parse_url($request->url())['path'] ?? '',
'input' => json_encode($request->input()),
'response' => $response->getContent(),
'start_time' => $startTime,
'end_time' => $endTime,
'handle_time' => $endTime - $startTime,
]);
}
}
在 Laravel 的 public/index.php
定义了 LARAVEL_START
常量,记录了 Laravel 启动的时候的微秒,我们可以利用这个来计算整个请求所处理的时长。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭