使用指南
事件系统
使用 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:request | HTTP 请求发起 | HttpRequestEventData |
http:response | HTTP 响应接收 | HttpResponseEventData |
http:error | HTTP 错误 | 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:success | API 调用成功 | ApiSuccessEventData |
api:error | API 调用失败 | 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', )