@lx-frontend/multi-track
Version:
sls 日志上传功能,当前支持小程序、web
120 lines (119 loc) • 3.61 kB
TypeScript
import type { ITrackConfig, ITrackOptions, SlsOptions } from './type';
/**
* 日志上报抽象类
* 业务端需要重新实现 format 方法,将日志格式化成 Sls 需要的格式
*/
export declare abstract class Track<ILog extends Record<string, any>, LogData extends ILog & {
id: string;
} = any> {
private logQueue;
private prepareLogQueue;
private processingIds;
private isUploading;
slsOptions: SlsOptions;
config: Required<ITrackOptions>;
private debounceTimer;
private flushIntervalTimer;
private nextId;
protected constructor(trackConfig: ITrackConfig);
/**
* 不同系统对上报日志有差异,暴露 format 方法,让子类实现兼容各业务系统
*/
abstract format(log: LogData): LogData;
/**
* 由子类实现具体的日志上报逻辑
* 如果失败,则抛出异常
* Note: 小程序中不支持 Headers 类型,需要使用 Record<string, string> 类型
*/
abstract _upload(payload: string | any | Uint8Array<ArrayBufferLike>, headers: Record<string, string>): Promise<unknown>;
/**
* 获取存储对象
*/
abstract _getStorage(key: string): any[];
/**
* 设置存储对象
*/
abstract _setStorage(key: string, value: any[]): void;
/**
* 生成唯一ID,通过时间戳+自增ID。很高效的唯一ID方式。
*/
private generateId;
/**
* 当前不同平台处理 request 不同,暴露给子类处理
* 生成 sls 请求 url
* eq: https://biz-frontend-upload.cn-shanghai.log.aliyuncs.com/logstores/ucma-frontend/track?APIVersion=0.6.0
* project + host + '/logstores' + logstore + '/track?APIVersion=0.6.0'
*/
generateSlsUrl(): string;
/**
* 注意 sls 的 value 只能是字符串。单单 JSON.stringify 遇到 number 这些会报错 PostBodyInvalid
* 将对象转换为字符串
*/
transString(obj: Record<string, any>): Record<string, any>;
/**
* 获取 sls 上报所需格式,注意 sls 的 value 只能是字符串
* 数据需要二次 JSON.stringify
* @link https://help.aliyun.com/zh/sls/developer-reference/api-sls-2020-12-30-putwebtracking?spm=a2c4g.11186623.0.0.39c93b79Z9iOcy
* @param logData 日志数组
*/
getRequestInfo(logData: LogData[]): {
payload: string;
headers: {
'x-log-apiversion': string;
'x-log-bodyrawsize': string;
};
};
/**
* 设置是否开启日志上报
*/
setUploadEnabled(enabled: boolean): void;
/**
* 添加日志到队列
*/
add(log: any): void;
/**
* 使用防抖上报日志
*/
private debounceUpload;
/**
* 由于日志都是异步参数,可能会出现乱序,所以需要排序
* 按照 eventId 升序排序
* @param arr
* @private
*/
private sortByEventId;
/**
* 获取可上传的日志(未在处理中的日志)
*/
private getUploadLogs;
/**
* 从队列中移除指定ID的日志
*/
private removeLogsById;
/**
* 上报日志
*/
upload(): Promise<boolean>;
/**
* 强制上报日志
*/
flush(): Promise<boolean>;
/**
* 定时上报日志
*/
private initializeFlushInterval;
/**
* 持久化日志到 localStorage
*/
private persistLogs;
/**
* 获取本地存储的日志
* @returns
*/
private getPersistedLogs;
/**
* 恢复持久化的日志
*/
private restorePersistedLogs;
destroy(): void;
}