有时候我们需要记录下请求和响应的全部参数
这样可以方便排查问题
现在通过中间件的形式增加一个AccessLog的记录功能
appHttpMiddleware目录下增加AccessLog.php 文件
代码语言:javascript复制<?php
namespace AppHttpMiddleware;
use Closure;
class AccessLog
{
/**
* 路由全局中间件
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$requestTime = microtime(true);
$response = $next($request);
$rq_time = microtime(true) - $requestTime;
$log = [
'method' => $request->method(),
'url' => $request->fullUrl(),
'param' => json_encode($request->all(), JSON_UNESCAPED_UNICODE),
'response' => $response->getContent(),
'req_header' => json_encode($request->header(), JSON_UNESCAPED_UNICODE),
'resp_header' => json_encode($response->headers->all(), JSON_UNESCAPED_UNICODE),
'ip_address' => $request->ip(),
'rq_time' => sprintf("%.2f", $rq_time),
];
logger()->channel('access')->info($log);
return $response;
}
}
app/Http/Kernel.php 注册一下AppHttpMiddlewareAccessLog::class
代码语言:javascript复制class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
// AppHttpMiddlewareTrustHosts::class,
AppHttpMiddlewareTrustProxies::class,
FruitcakeCorsHandleCors::class,
AppHttpMiddlewarePreventRequestsDuringMaintenance::class,
IlluminateFoundationHttpMiddlewareValidatePostSize::class,
AppHttpMiddlewareTrimStrings::class,
IlluminateFoundationHttpMiddlewareConvertEmptyStringsToNull::class,
AppHttpMiddlewareAccessLog::class
];
增加一下配置
config/logging.php
代码语言:javascript复制 'access' => [
'driver' => 'daily',
'path' => env('LOG_PATH_ACCESS', storage_path('logs/access/laravel.log')),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14,
],
请求一下就会看到生成文件