miniprogram-logger
Version:
It is used to log and gather statistics of users' behavior.
71 lines (64 loc) • 2.08 kB
text/typescript
import { ITelemetry, UserInfo } from "./ITelemetry";
import { Reporter, Dictionary } from "../common/reporter";
import { guid } from "../common/guid";
export interface TelemetryObject extends Dictionary {
/** 记录ID */
id?: string;
/** 记录操作 */
action?: string;
/** 参数 */
param?: any;
/** 扩展内容 */
extension?: TelemetryExtension;
/** 客户端数据 */
user?: UserInfo;
}
/**
* 默认 Telemetry对象转换函数
* 字段中注入`id`和`extension.timestamp`
* @param data LogObject
*/
export function TelemetryTransformFunction<T extends TelemetryObject =TelemetryObject>(data: T): Dictionary {
if (typeof data === "object") {
if (!data.id) {
data.id = guid();
}
if (!data.extension) {
data.extension = {};
}
data.extension.timestamp = new Date().toISOString();
}
return data;
}
type TelemetryKeys = ['action', 'param', 'extension', 'user'];
type TelemetryValues = [string, any, Dictionary, UserInfo];
export class ReportAnalytics
extends Reporter<TelemetryObject, TelemetryValues, TelemetryKeys>
implements ITelemetry {
constructor(tableName: string, context?: Partial<TelemetryObject>) {
super(tableName, ['action', 'param', 'extension', 'user'], context);
this.TransformFunction = TelemetryTransformFunction;
}
/**
* 快速记录性能日志
* @param action 操作,
* @param context 其它数据
*/
public record(action: TelemetryValues[0], parameter?: TelemetryValues[1], extension?: TelemetryValues[2], userInfo?: TelemetryValues[3]): void;
/**
* 快速记录性能日志
* @param data PerformanceParam
*/
public record(data: TelemetryObject): void;
public record(): void {
this.report.apply(this, arguments as any);
}
}
interface TelemetryExtension extends Dictionary {
/** 关联ID */
debug_correlation_id?: string;
/** 处理时间 */
process_time?: number;
/** 时间戳 */
timestamp?: string | number;
}