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
TypeScript
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 };