Laravel8自定义json日志记录HTTP请求

IT小马 -
Laravel8自定义json日志记录HTTP请求
1.自定义日志通道vim config/logging.php
'request' => [
    'driver' => 'daily',//按日期分隔日志
    'path' => storage_path('logs/request.log'),
    'tap' => [App\Logging\CustomizeFormatter::class],
    'days' => 14,
],
2.自定义json解析新建CustomizeFormatter
<?php
namespace App\Logging;

class CustomizeFormatter
{
    /**
     * 自定义给定的日志实例。
     *
     * @param  \Illuminate\Log\Logger $logger
     * @return void
     */
    public function __invoke($logger)
    {
        foreach ($logger->getHandlers() as $handler) {
            $handler->setFormatter(new CustomizeJsonFormatter());
        }
    }
}
新建CustomizeJsonFormatter
<?php
namespace App\Logging;

use Monolog\Formatter\JsonFormatter;

class CustomizeJsonFormatter extends JsonFormatter
{
    /**
     * 格式化
     *
     * @param array $record
     * @return string
     */
    public function format(array $record): string
    {
        $newRecord = [
            'datetime' => $record['datetime']->format('Y-m-d H:i:s'),
            'message' => $record['message'],
        ];

        if (!empty($record['context'])) {
            $newRecord = array_merge($newRecord, $record['context']);
        }
        $json = $this->toJson($this->normalize($newRecord), true) . ($this->appendNewline ? "\n" : '');

        return $json;
    }
}
3.记录HTTP请求创建中间件
php artisan make:middleware RequestLogMiddleware
配置全局访问 vim app/Http/Kernel.php
protected $middleware = [
    ...
    \App\Http\Middleware\RequestLogMiddleware::class,
];
记录HTTP请求
$requestLog = [
    'ip' => $request->ips(),
    'method' => $request->method(),
    'status_code' => $response->getStatusCode(),
    'headers' => $request->header(),
    'url' => $request->url(),
    'query' => $request->query(),
    'params' => $request->all(),
    'response' => $response->getData(),
];
4.输出日志
\Log::channel('request')->info('REQUEST LOG', $requestLog);
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

laravel介绍

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。在Laravel中已经具有了一套高级的PHP ActiveRecord实现 -- Eloquent ORM。它能方便的将“约束(constraints)”应用到关系的双方,这样你就具有了对数

Tags 标签

laravelphp

扩展阅读

加个好友,技术交流

1628738909466805.jpg