如何在Laravel日志中存储用户请求IP与User Agent并记录全量请求数据
全量请求日志实现方案
你当前使用的Exceptions/Handler.php仅能记录触发异常的请求数据,要覆盖所有正常、异常请求的全量数据记录,应该使用Laravel的全局中间件实现,操作步骤如下:
- 执行Artisan命令生成自定义中间件
php artisan make:middleware RequestLogMiddleware - 编辑生成的
app/Http/Middleware/RequestLogMiddleware.php文件,写入日志记录逻辑,示例代码如下:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Log; class RequestLogMiddleware { public function handle(Request $request, Closure $next) { // 先执行后续逻辑获取响应实例 $response = $next($request); // 组装日志字段,可根据需求自行增减 $logData = [ 'url' => $request->url(), 'method' => $request->method(), 'headers' => $request->headers->all(), 'request_params' => $request->all(), 'referer' => $request->server('HTTP_REFERER'), 'response_status' => $response->getStatusCode() ]; // 写入日志,格式和你现有异常日志保持一致 $message = $logData['url'] . "\n" . json_encode($logData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); Log::info($message); return $response; } }
- 注册为全局中间件:编辑
app/Http/Kernel.php文件,找到$middleware属性,将中间件类添加到数组末尾即可,这样所有进入应用的请求都会触发日志记录:
protected $middleware = [ // 框架自带的其他全局中间件... \App\Http\Middleware\RequestLogMiddleware::class, ];
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

