php - 如何将 Laravel rest Api 日志保存到数据库中
问题描述
我想将所有 api 日志保存在 db 中。例如,每当一个 api 被命中时,它的请求和响应都会保存在一个表中。
Lavavel 中是否有设置可以将 Rest apis 的日志启用到数据库中。
例如在 codeigniter 中:请求参数日志为:a:12:{s:13:"session_token";s:20:"OiCtWkqBLm6ScaSHOmQR";s:12:"Content-Type";s:16:"application/json" ;s:13:"缓存控制";s:8:"无缓存";s:13:"邮递员令牌";s:36:"0d13fe2e-9986-4ef2-ba46-8207dd28cd44";s:10 :"User-Agent";s:20:"PostmanRuntime/7.1.1";s:6:"Accept";s:3:" / ";s:4:"Host";s:9:"localhost" ;s:6:"cookie";s:81:"PHPSESSID=ho1oa4gjll59u4vq9usct3lev7;ci_session=ruttt4i5144hob6feq3mrv080nh2n74o";s:15:"accept-encoding";s:13:"gzip, deflate";s:14:"content-长度";s:2:"19";s:10:"连接";s:10:"keep-alive";s:7:"user_id";i:13;}
解决方案
如果你想自己构建一些东西,可终止的中间件是 Laravel 中一个很好的解决方案。在完成所有繁重的工作(处理请求和响应等)之后执行这种类型的中间件。
添加一个新模型来存储您的 LogEntries。创建您的迁移等。这是我不会解释的基础 Laravel 东西...... :-)
然后,从中间件开始,创建一个像这样的中间件类:
$ php artisan make:middleware RequestLoggerMiddleware
向新类添加一个主体:
class RequestLoggerMiddleware
{
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate(Request $request, Response $response)
{
$logEntry = new LogEntry();
$logEntry->attribute = VALUE;
$logEntry->attribute = VALUE;
$logEntry->attribute = VALUE;
$logEntry->attribute = VALUE;
$logEntry->save();
}
}
将中间件添加到您的 Kernel.php:
protected $middleware = [
...
RequestLoggerMiddleware::class,
...
];
在中间件中,您可以向属性添加大量内容。注入的响应和请求中有很多信息:
请求开始时间 >> 日期('Ymd H:i:s', LARAVEL_START)
URL >> 请求->fullUrl()
请求 HTTP 方法 >> $request->method()
请求正文 >> json_decode($request->getContent(), true);
请求头 >> $request->header();
ip >> $request->ip()
状态码 >> $response->getStatusCode()
请求正文 >> json_decode($response->getContent(), true);
顺便说一句,这是您可以使用的代码结构示例,为您提供有关解决方案的基本概念。显然,您需要为模型、迁移等添加正确的属性。但我相信您可以处理这部分......
并且:在构造函数中注入模型而不是上面的例子...... :-)
推荐阅读
- laravel - Laravel 作为多个远程客户数据库的后端
- azure - AKS Azure 中的微服务与负载均衡器集成
- python - 如何在views.py类中添加页数而不会出错[Django]
- google-sheets - 条件格式 Google 表格的规则对我来说很复杂
- python - 我正在尝试使用 treminal 在 mac os 上安装 pycups,但我收到“pycups (setup.py) ... 错误”
- java - 使用 OpenJPA 时在 VM 参数中添加 java 代理时出错
- jdbc - Nifi gmail 开源 jdbc 驱动
- python - 如何修复python中的条形图(自定义条形图)?
- excel - 如何在 SharePoint 上“签入”上传的文档?
- python - DisabledFunctionError: cv2.imshow() 在 Colab 中被禁用,因为它会导致 Jupyter 会话崩溃