[Laravel系列] 框架中增加记录access log的日志中间件
2023-02-18 15:36:31 时间
有时候我们需要记录下请求和响应的全部参数
这样可以方便排查问题
现在通过中间件的形式增加一个AccessLog的记录功能
app\Http\Middleware目录下增加AccessLog.php 文件
<?php namespace App\Http\Middleware; use Closure; class AccessLog { /** * 路由全局中间件 * * @param \Illuminate\Http\Request $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 注册一下\App\Http\Middleware\AccessLog::class
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 = [ // \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, \Fruitcake\Cors\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \App\Http\Middleware\AccessLog::class ];
增加一下配置
config/logging.php
'access' => [ 'driver' => 'daily', 'path' => env('LOG_PATH_ACCESS', storage_path('logs/access/laravel.log')), 'level' => env('LOG_LEVEL', 'debug'), 'days' => 14, ],
请求一下就会看到生成文件
相关文章
- 技术分享 | 缓存穿透 - Redis Module 之布隆过滤器
- PaddleHub--{超参优化AutoDL Finetuner}【二】
- 应用实践:Paddle分类模型大集成者[PaddleHub、Finetune、prompt]
- 从Thread.start()方法看Thread源码,多次start一个线程会怎么样
- Thread类源码剖析
- zookeeper(zkCli)命令概览
- 终极锁实战:单JVM锁+分布式锁
- AbstractQueuedSynchronizer AQS框架源码剖析
- 在openjdk8下看Unsafe源码
- eclipse卡死在search for main types 20 files to index
- 多线程并发执行任务,取结果归集。终极总结:Future、FutureTask、CompletionService、CompletableFuture
- 同步中的四种锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock
- 根据CPU核心数确定线程池并发线程数
- 分布式共识算法 (二) Paxos算法
- secureCRT关闭连接自动关闭tomcat服务
- apache的MultipartEntityBuilder文件上传
- JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
- jdk源码剖析四:JDK1.7升级1.8 HashMap原理的变化
- jdk源码剖析二: 对象内存布局、synchronized终极原理
- jdk源码剖析一:OpenJDK-Hotspot源码包目录结构