翼度科技»论坛 编程开发 PHP 查看内容

基于Laravel封装一个强大的请求响应日志记录中间件

13

主题

13

帖子

39

积分

新手上路

Rank: 1

积分
39
为何强大


  • 记录全面: 包含请求路径、请求方法、客户端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强大的日志渠道隔离和按天切割功能,使得记录日志过程更加强大。
效果示例
  1. [2023-10-18 18:14:48] local.INFO:
  2. url      : http://xxx/api?framework=laravel&language=php
  3. method   : POST
  4. ip       : 127.0.0.1
  5. ua       : PostmanRuntime-ApipostRuntime/1.1.0
  6. payload  : {"key":"val","k":"v"}
  7. file     : []
  8. header   : {"content-type":"application\/x-www-form-urlencoded"}
  9. time     : 16.90
  10. mem      : 19.16 MB
  11. user_id  : 0
  12. response : {"code":0,"msg":"","data":[]}
复制代码
部署
  1. #在config/logging.php中的channels项添加如下配置
  2. 'req' => [
  3.     'driver' => 'daily',
  4.     'path' => storage_path('logs/request.log'),
  5.     'level' => env('LOG_LEVEL', 'debug'),
  6.     'days' => 3,
  7.     'permission' => 0777
  8. ],
  9. #进入laravel所在目录,用artisan命令创建中间件
  10. php artisan make:middleware RequestMiddleware
复制代码
  1. //在app/Http/Kernel.php文件的protected $middleware数组中追加一行,用于注册全局中间件
  2. \App\Http\Middleware\RequestMiddleware::class
复制代码
编写

[code]

举报 回复 使用道具