@ikenxuan/amagi
使用指南

事件系统

使用 amagi 的事件驱动架构

事件系统

amagi v6 采用事件驱动架构,移除了对 log4js 的依赖,通过事件系统提供日志、监控等功能。

基本用法

import , {  } from '@ikenxuan/amagi'

// 方式 1:通过客户端实例
const  = ({ : { : '', : '', : '', : '' } })
..('api:success', () => {
  .(`[${.}] ${.} 成功`)
})

// 方式 2:通过全局事件对象
.('log:info', () => {
  .(.)
})

// 方式 3:通过静态方法
.('api:error', () => {
  .(`API 错误: ${.}`)
})

事件类型

日志事件

事件名说明数据类型
log:info信息日志LogEventData
log:warn警告日志LogEventData
log:error错误日志LogEventData
log:debug调试日志LogEventData
log:mark标记日志LogEventData
interface LogEventData {
  : 'info' | 'warn' | 'error' | 'debug' | 'mark'
  : string
  ?: unknown[]
  : Date
}

HTTP 事件

事件名说明数据类型
http:requestHTTP 请求发起HttpRequestEventData
http:responseHTTP 响应接收HttpResponseEventData
http:errorHTTP 错误NetworkErrorEventData
interface HttpRequestEventData {
  : string
  : string
  ?: <string, string>
  : Date
}

interface HttpResponseEventData {
  : string
  : string
  : number
  : number
  ?: string
  ?: string
  ?: string
  : Date
}

网络事件

事件名说明数据类型
network:retry网络重试NetworkRetryEventData
network:error网络错误NetworkErrorEventData
interface NetworkRetryEventData {
  : string
  : number
  : number
  : number
  ?: string
  : Date
}

interface NetworkErrorEventData {
  : string
  : string
  : number
  ?: string
  : Date
}

API 事件

事件名说明数据类型
api:successAPI 调用成功ApiSuccessEventData
api:errorAPI 调用失败ApiErrorEventData
interface ApiSuccessEventData {
  : 'douyin' | 'bilibili' | 'kuaishou' | 'xiaohongshu'
  : string
  : unknown
  : number
  : number
  : Date
}

interface ApiErrorEventData {
  : 'douyin' | 'bilibili' | 'kuaishou' | 'xiaohongshu'
  : string
  ?: string | number
  : string
  ?: string
  ?: number
  : Date
}

实现自定义日志

使用 console

import {  } from '@ikenxuan/amagi'

.('log:info', () => .(`[INFO] ${.}`))
.('log:warn', () => .(`[WARN] ${.}`))
.('log:error', () => .(`[ERROR] ${.}`))
.('log:debug', () => .(`[DEBUG] ${.}`))

使用 pino

import {  } from '@ikenxuan/amagi'
import  from 'pino'

const  = ()

.('log:info', () => .(.))
.('log:warn', () => .(.))
.('log:error', () => .(.))
.('log:debug', () => .(.))

使用 winston

import {  } from '@ikenxuan/amagi'
import winston from 'winston'

const  = winston.({
  : [new winston..()]
})

.('log:info', () => .(.))
.('log:error', () => .(.))

API 监控示例

import {  } from '@ikenxuan/amagi'

// 统计 API 调用
const  = {
  : 0,
  : 0,
  : 0
}

.('api:success', () => {
  .++
  . += .
  .(`✓ [${.}] ${.} - ${.}ms`)
})

.('api:error', () => {
  .++
  .(`✗ [${.}] ${.} - ${.}`)
})

// 定期输出统计
(() => {
  const  = . > 0 ? . / . : 0
  .(`统计: 成功 ${.}, 失败 ${.}, 平均耗时 ${.(2)}ms`)
}, 60000)

一次性监听

使用 once 方法注册只触发一次的监听器:

.('api:success', () => {
  .('首次 API 调用成功')
})

移除监听器

const  = (: { : string }) => .(.)

// 注册
.('log:info', )

// 移除
.('log:info', )

On this page