海风蓝 发表于 2023-10-25 04:06:56

基于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强大的日志渠道隔离和按天切割功能,使得记录日志过程更加强大。
效果示例

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编写

页: [1]
查看完整版本: 基于Laravel封装一个强大的请求响应日志记录中间件