Files
dsserver/plugin/admin/app/middleware/RequestTimeMiddleware.php
T
zimoyin 1a84e92384 init
2026-04-03 11:32:19 +08:00

50 lines
1.5 KiB
PHP

<?php
namespace plugin\admin\app\middleware;
use app\config\Config;
use app\utils\Logger;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;
/**
* 请求耗时监测中间件
* 记录从请求进入到响应返回的全流程耗时
*/
class RequestTimeMiddleware implements MiddlewareInterface
{
public function process(Request $request, callable $handler): Response
{
// 1. 请求进入时记录开始时间(微秒级,高精度)
$startTime = microtime(true);
if (Config::getInstance()->enableRequestTimeLog) {
Logger::debug("{} {}", [$request->method(), $request->fullUrl()]);
}
// 2. 执行后续中间件/控制器业务逻辑
$response = $handler($request);
if (Config::getInstance()->enableRequestTimeLog) {
// 3. 请求处理完成后计算耗时
$endTime = microtime(true);
$costTime = round(($endTime - $startTime) * 1000, 2); // 转换为毫秒,保留2位小数
// 获取请求信息(方便日志定位)
$requestMethod = $request->method();
$requestUrl = $request->fullUrl();
$clientIp = $request->getRealIp();
// 4. 打印耗时日志
Logger::debug("[请求耗时] {} {} | IP: {} | 耗时: {} ms", [
$requestMethod,
$requestUrl,
$clientIp,
$costTime
]);
}
// 5. 返回响应给客户端
return $response;
}
}