type TFilterOption = (data: ILogDBData) => boolean | IJson | IJson[]; type IAddReturn = { discard: ILogDBData | null; add: ILogDBData; } | null; /* * @Author: tackchen * @Date: 2022-07-24 16:35:16 * @Description: Coding something */ interface IJson { [prop: string]: T; } type TLogType = 'error' | 'log' | 'warn' | 'info'; // 日志存储的数据 interface ILogDBData { uid: string; clientid: string; traceid: string; network: string; url: string; ua: string; msg: string; payload?: any; type: TLogType; duration: number; time: string; timestamp: number; logid: string; } type ILoggerConfig = Pick< ILogDBData, 'uid' | 'traceid' | 'network' | 'clientid' > interface IBaseInfo extends ILoggerConfig, Pick< ILogDBData, 'url' | 'ua' > {} type IBaseInfoOption = Partial type TLogStoreType = 'idb' | 'storage' | 'temp' | 'none'; interface ILogError {code: number, error: any, message: string} interface IStoreConfig { id: string; // 作为dbName 使用,默认为location.hostname useConsole: boolean; storeType: TLogStoreType; // 存储类型 maxRecords: number; // 最大日志数量 默认10000 onReport?: (data: ILogDBData) => void; onDiscard?: (data: ILogDBData) => void; onError?: (err: ILogError) => void; } interface ILoggerOption extends Partial { baseInfo?: IBaseInfo; } type TDownloadKeys = (keyof ILogDBData | string)[]; interface IDownloadOptions { name?: string; filter?: TFilterOption; keys?: TDownloadKeys; } declare class Logger { static version: string; private _store; id: string; storeType: TLogStoreType; constructor({ id, useConsole, storeType, maxRecords, baseInfo, onReport, onDiscard, onError, }?: ILoggerOption); injectBaseInfo(baseInfo?: IBaseInfoOption & IJson): Promise; log(...args: any[]): Promise; error(...args: any[]): Promise; warn(...args: any[]): Promise; info(...args: any[]): Promise; private _logCommon; close(): Promise; destory(): Promise; clear(): Promise; count(): Promise; delete(logid: string): Promise; refreshTraceId(): Promise; refreshDurationStart(): Promise; download({ name, filter, keys }?: IDownloadOptions): Promise; get(logid: string): Promise; getAll(): Promise; filter(filter?: TFilterOption): Promise; } export { Logger as default };