Thinkphp6记录请求日志
Thinkphp6记录请求日志
建立中间件 RequestLog
<?php
namespace app\middleware;
use Closure;
use think\Request;
use think\Response;
use think\facade\Log;
class RequestLog
{
/**
* 处理请求
*
* @param Request $request
* @param Closure $next
* @return Response
*/
public function handle(Request $request, Closure $next)
{
$header = $request->header();
$uniqueId = $header['x-trace-id'] ?? uniqid();
// 在请求处理之前记录日志
Log::info('Request Log: ' . json_encode([
'url' => $request->url(),
'method' => $request->method(),
'x-trace-id' => $uniqueId,
'ip' => $request->ip(),
'params' => $request->param(),
'time' => time(),
'header' => $request->header(),
]));
// 处理请求
$response = $next($request);
$data = $response->getData() ?? [];
$code = $data['code'] ?? $response->getCode();
// 在请求处理之后记录日志
Log::info('Response Log: ' . json_encode([
'x-trace-id' => $uniqueId,
'code' => $code,
'time' => time()
]));
return $response;
}
}
在 application/middleware.php
中定义中间件
<?php
// 全局中间件定义文件
return [
app\middleware\RequestLog::class
];
在应用配置文件中 config/middleware.php
启用中间件
<?php
// 中间件配置
return [
// 别名或分组
'alias' => [
'request_log' => app\middleware\RequestLog::class,
],
// 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
'priority' => [],
];
以上操作后,每次请求都会记录 日志,方便问题排查
License:
CC BY 4.0