UNPKG

idb-logger

Version:

A high-performance, high-capacity, and highly scalable web-side logging system based on WebWorker and indexedDB

99 lines (83 loc) 2.61 kB
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<T=any> { [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<IBaseInfo> 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<IStoreConfig> { 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<void>; log(...args: any[]): Promise<IAddReturn>; error(...args: any[]): Promise<IAddReturn>; warn(...args: any[]): Promise<IAddReturn>; info(...args: any[]): Promise<IAddReturn>; private _logCommon; close(): Promise<boolean>; destory(): Promise<boolean>; clear(): Promise<boolean>; count(): Promise<number>; delete(logid: string): Promise<boolean>; refreshTraceId(): Promise<void>; refreshDurationStart(): Promise<void>; download({ name, filter, keys }?: IDownloadOptions): Promise<number>; get(logid: string): Promise<ILogDBData | null>; getAll(): Promise<ILogDBData[]>; filter(filter?: TFilterOption): Promise<ILogDBData[]>; } export { Logger as default };