brezgalov/yii2-external-api-logger 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

brezgalov/yii2-external-api-logger

Composer 安装命令:

composer require brezgalov/yii2-external-api-logger

包简介

logger for api requests

README 文档

README

This component helps you log external api interaction

Installation

composer require brezgalov/yii2-external-api-logger

Usage

Specify logger as an application component at your config file:

[
    bootstrap' => [
        'logger',
    ],
    'components' => [
        'logger' => [
            'class' => LoggerComponent::class,
            'logsStorage' => LogsStorageDb::class,
        ],
    ],
],

LogsStorageDb class requires applying migration from src/LogsStorageDb/Migrations

I prefer using yiisoft/yii2-httpclient as client and brezgalov/activity-id as ActivityId helper

Feel free to use any client you want. ActivityId is obligatory constructor parameter tho. It serves as a Primary Key for db logs storage.

You could use uniqid() instead of activity-id lib, or any unique identifier you prefer.

// create activityId to bind logs all the way through
$activityId = \Yii::createObject(ActivityId::class, ['name' => Auth::ACTIVITY_ID_LOGIN]) ;

// bind request data
$eventRequestSent = \Yii::createObject(EventExternalApiRequestSent::class, ['activityId' => (string)$activityId,]);

$eventRequestSent->method = $request->getMethod();
$eventRequestSent->url = $request->getFullUrl();
$eventRequestSent->input = $request->getData();
$eventRequestSent->requestGroup = Auth::REQUEST_GROUP;
$eventRequestSent->requestId = Auth::REQUEST_ID_LOGIN;

// trigger event before sending request

\Yii::$app->trigger(LoggerComponent::EVENT_EXTERNAL_API_REQUEST_SENT, $eventRequestSent);

// send request

$response = $request->send();

// bind response params

$eventResponseReceived = \Yii::createObject(EventExternalApiResponseReceived::class, ['activityId' => (string)$activityId]);
$eventResponseReceived->statusCode = $response->statusCode;
$eventResponseReceived->response = $response->getContent();

// trigger event after response is received

\Yii::$app->trigger(LoggerComponent::EVENT_EXTERNAL_API_RESPONSE_RECEIVED, $eventResponseReceived);

// some usefull example code further

if ($response->isOk) {
    ...
}

Usage inside SQL Transaction

While you log api request inside transaction - any error could ruin yor log info. LogApiRequestDelayedBehavior is an option to escape such issue.

Replace your component setup with:

[
    bootstrap' => [
        'logger',
    ],
    'components' => [
        'logger' => [
            'class' => DelayedLoggerComponent::class,
            'logsStorage' => LogsStorageDb::class,
            'fireStorageEvent' => \yii\base\Application::EVENT_AFTER_ACTION,
        ],
    ],
],

Then replace previous logger events trigger code with:

    // create activityId to bind logs all the way through
    $activityId = (string)\Yii::createObject(ActivityId::class, ['name' => Auth::ACTIVITY_ID_SEND_SMS_CODE]);

    $request = // build \yii\httpclient\Request;

    // fill up request fields
    $requestLogDto = \Yii::createObject(ApiLogFullDto::class);
    $requestLogDto->activityId = $activityId;
    $requestLogDto->requestTime = time();
    $requestLogDto->method = $request->getMethod();
    $requestLogDto->url = $request->getFullUrl();
    $requestLogDto->input = $request->getData();
    $requestLogDto->requestGroup = Auth::REQUEST_GROUP;
    $requestLogDto->requestId = Auth::REQUEST_ID_SEND_SMS;

    $response = $request->send();

    // fill up response fields
    $requestLogDto->responseTime = time();
    $requestLogDto->statusCode = $response->statusCode;
    $requestLogDto->responseContent = $response->getContent();

    // delay event

    /** @var DelayedLoggerComponent $loggerComponent */
    $loggerComponent = \Yii::$app->get('logger');
    $loggerComponent->delayLogDto($requestLogDto);

Next fire configured "fireStorageEvent" event outside of transaction block. I suggest to use EVENT_AFTER_ACTION event.

brezgalov/yii2-external-api-logger 适用场景与选型建议

brezgalov/yii2-external-api-logger 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 45 次下载、GitHub Stars 达 0, 最近一次更新时间为 2022 年 07 月 22 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 brezgalov/yii2-external-api-logger 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 brezgalov/yii2-external-api-logger 我们能提供哪些服务?
定制开发 / 二次开发

基于 brezgalov/yii2-external-api-logger 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 45
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 6
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-07-22