如何将拉拉维尔休息 API 日志保存到数据库中



我想将所有 api 日志保存在数据库中。 例如,每当 api 被命中时,其请求和响应都会保存在表中。

Lavavel 中是否有设置可以将 Rest apis 的日志启用到数据库中。

例如在编码点火器中: 请求参数日志为: A:12:{s:13:"session_token";s:20:"OiCtWkqBLm6ScaSHOmQR";s:12:"内容类型";s:16:"application/json";s:13:"缓存控制";s:8:"无缓存";s:13:"邮递员令牌";s:36:"0d13fe2e-9986-4ef2-ba46-8207dd28cd44";s:10:"用户代理";s:20:"邮递员运行时/7.1.1";s:6:"接受";s:3:">/";s:4:"主机";s:9:"本地主机";s:6:"饼干";s:81:"PHPSESSID=ho1oa4gjll59u4vq9usct3lev7;ci_session=Ruttt4I5144hob6FEQ3mrv080NH2N74O";S:15:"接受编码";s:13:"gzip, deflate";s:14:"内容长度";s:2:"19";s:10:"连接";s:10:"保持活力";s:7:"user_id";i:13;}

如果你想自己构建一些东西,可终止的中间件是 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();
}
}

将中间件添加到内核.php:

protected $middleware = [
...
RequestLoggerMiddleware::class,
...
];

在中间件中,您可以向属性添加大量内容。注入的响应和请求中有很多信息:

  • 请求开始时间>>日期("Y-m-d H:i:s", LARAVEL_START(

  • URL>> request->fullUrl((

  • 请求 HTTP 方法>> $request->method((

  • 请求正文>> json_decode($request->getContent((, true(;

  • 请求标头>> $request->header((;

  • IP>> $request->ip((

  • 状态代码>> $response->getStatusCode((

  • 请求正文>> json_decode($response->getContent((, true(;

顺便说一句,这是您可以使用的代码结构的示例,可让您对解决方案有一个基本的了解。显然,您需要向模型、迁移等添加正确的属性。但我相信你可以处理这个部分...

并且:在构造函数中注入模型而不是上面的示例... :-(

在 laravel 中没有选择。因此,您需要在 https://sergeyzhuk.me/2016/07/30/laravel-logging-to-db/为此结帐编写自定义代码

最新更新