基于Laravel封装一个强大的请求响应日志记录中间件
|
为何强大
- 记录全面: 包含请求路径、请求方法、客户端IP、设备标识、荷载数据、文件上传、请求头、业务逻辑处理时间、业务逻辑所耗内存、用户id、以及响应数据。
- 配置简单: 默认不需要写任何逻辑可开箱即用,靠前4个方法,就可指定某些url不记录日志,或不记录某些请求头,不记录某些荷载数据,或决定是否返回非json类型的相应数据。
- 清晰简洁: 返回的每项数据都是json或者字符串,一行一项数据,且缩进一致,清晰明了。该有的展示项都有,该忽略的展示项已经被忽略。
- 规范统一: 无论请求数据是什么格式,最后到日志的数据之有字符串或json两种格式,避免五花八门的数据造成日志格式混乱。
- 强兼容性: 无论是什么请求方式(GET、POST、DELETE、PATCH、PUT、OPTIONS等),或者传递什么内容类型(x-www-form-urlencoded、multipart/form-data、json、xml、纯文本),只要通过路由,上游无断点或死循环,日志都可记录,适用于任何项目的场景。
- 灵活扩展: 对中间件前4个配置相关的方法,引入了Request对象,方便根据此对象实现更复杂的逻辑。
- 方便调试: 当项目出问题时,有日志参考是必须的,结合"tail -f",或者日志查看器插件更是如虎添翼。
- 日志隔离: 利用laravel强大的日志渠道隔离和按天切割功能,使得记录日志过程更加强大。
效果示例
- [2023-10-18 18:14:48] local.INFO:
- url : http://xxx/api?framework=laravel&language=php
- method : POST
- ip : 127.0.0.1
- ua : PostmanRuntime-ApipostRuntime/1.1.0
- payload : {"key":"val","k":"v"}
- file : []
- header : {"content-type":"application\/x-www-form-urlencoded"}
- time : 16.90
- mem : 19.16 MB
- user_id : 0
- response : {"code":0,"msg":"","data":[]}
复制代码 部署
- #在config/logging.php中的channels项添加如下配置
- 'req' => [
- 'driver' => 'daily',
- 'path' => storage_path('logs/request.log'),
- 'level' => env('LOG_LEVEL', 'debug'),
- 'days' => 3,
- 'permission' => 0777
- ],
- #进入laravel所在目录,用artisan命令创建中间件
- php artisan make:middleware RequestMiddleware
复制代码- //在app/Http/Kernel.php文件的protected $middleware数组中追加一行,用于注册全局中间件
- \App\Http\Middleware\RequestMiddleware::class
复制代码 编写
[code] |
|
|
|
发表于 2023-10-25 04:06:56
举报
回复
分享
|
|
|
|