如何将 Laravel rest Api 日志保存到数据库中

SVM*_*SVM 6 php api rest laravel laravel-5

我想将所有 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:"接受编码";s:14:";def-s1, length";s:2:"19";s:10:"Connection";s:10:"keep-alive";s:7:"user_id";i:13;}

小智 13

如果你想自己构建一些东西,可终止中间件是 Laravel 中一个很好的解决方案。这种类型的中间件在所有繁重的工作完成(请求和响应处理等)后执行。

添加一个新模型来存储您的 LogEntries。创建您的迁移等。这是 Laravel 的基础内容,我不会解释... :-)

然后,从中间件开始,创建一个像这样的中间件类:

$ php artisan make:middleware RequestLoggerMiddleware
Run Code Online (Sandbox Code Playgroud)

向新类添加主体:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

将中间件添加到您的 Kernel.php 中:

protected $middleware = [
    ...
    RequestLoggerMiddleware::class,
    ...
];
Run Code Online (Sandbox Code Playgroud)

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

  • 请求开始时间>> date('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);

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

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