http 请求增加 X-Request-ID

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    },
### Vue 项目中 OSS 上传时 `x-oss-request-id` 请求问题解决方案 在 Vue 项目中实现文件上传至阿里云对象存储服务(OSS)的过程中,可能会遇到与 `x-oss-request-id` 相关的问题。此 ID 是每次请求唯一标识符,在调试和日志记录方面非常重要。 #### 配置 Ali-OSS SDK 客户端选项 为了确保能够获取并处理 `x-oss-request-id`,需要正确初始化 Ali-oss'; const client = new OSS({ region: '<YourRegion>', accessKeyId: '<YourAccessKeyId>', accessKeySecret: '<YourAccessKeySecret>', bucket: '<YourBucketName>' }); ``` 当使用自定义 HTTP 请求函数来上传文件时,可以通过监听响应头中的 `x-oss-request-id` 来捕获该值[^2]。 #### 实现 Element UI 文件上传组件的自定义上传逻辑 通过覆盖默认的上传行为,可以更灵活地控制整个过程,并且可以在适当的位置提取所需的头部信息: ```html <template> <el-upload :http-request="customUpload"> <!-- ... --> </el-upload> </template> <script> export default { methods: { async customUpload(option) { try { const result = await option.onProgress(); // 开始进度条 let res; if (option.file) { res = await client.put(`/${option.file.name}`, option.file); console.log('Request Id:', res.res.headers['x-oss-request-id']); // 记录下request id this.$message.success('File uploaded successfully'); option.onSuccess(res); // 成功回调 } } catch(error){ console.error('Error occurred during file upload.', error); if (error.statusCode === 403 || error.statusCode === 400) { console.warn('Request Id for troubleshooting:', error.requestId); } option.onError(error); // 失败回调 } } }, }; </script> ``` 上述代码片段展示了如何利用 `client.put()` 方法完成实际的数据传输操作的同时也打印出了 `x-oss-request-id` ,以便于后续排查可能出现的问题[^1]。 对于跨域场景下的应用部署,还需要注意服务器端是否已经开放了相应的 CORS 设置以及前端项目的代理配置,以避免不必要的权限错误发生[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值