http 请求增加 X-Request-ID

该博客介绍了如何在Monolog日志系统中处理请求信息。通过RequestProcessor类,记录请求的方法、路径和请求ID。同时,利用UidProcessor生成请求ID,并在日志文件中以JSON格式存储,确保了日志的详细性和可追溯性。日志文件根据日期和时间进行分割,便于管理和检索。
namespace log\processor;


use Request;

class RequestProcessor
{
    public function __invoke($record)
    {
        $extra = [
            'method' => Request::method(),
            'path' => Request::pathinfo()
        ];
        if (Request::header('X-Request-ID')) {
            $extra['uid'] = Request::header('X-Request-ID');
        } else {
            $extra['uid'] = app('requestId');
        }
        $record['extra'] = $extra;
        return $record;
    }
}

app(‘requestId’); 是将 请求方式写到了 app 容器中,也就是全局里

创建 requestId

use Monolog\Processor\UidProcessor;

    'requestId' => function () {
        return (new UidProcessor(32))->getUid();
    },

在请求日志中添加

use Monolog\Formatter\JsonFormatter;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Monolog\Processor\PsrLogMessageProcessor;
use log\processor\RequestProcessor;

\Psr\Log\LoggerInterface::class => function () {
        $date = date_create();
        // prepare for stream handler
        $folder = Env::get('MONOLOG_PATH') . $date->format('Ym');
        $day = $date->format('d');
        $hour = $date->format('H');
        $seg = $day . '.' . ceil($hour / 6);
        if (PHP_SAPI === 'cli') {
            $suffix = '_cli';
        } else {
            $suffix = '';
        }
        $logFileName = $folder . '/' . $seg . $suffix . '.log';
        $handler = new StreamHandler($logFileName);
        $handler->setFormatter(new JsonFormatter());

        $handlers = [
            $handler
        ];
        $processors = [
            new RequestProcessor(),
            new PsrLogMessageProcessor()
        ];
		// 注意后面两个参数的使用
        $logger = new Logger('jsboss3', $handlers, $processors);

        return $logger;
    },
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值