frontend-logger-advanced
Version:
Comprehensive frontend logging system with dead click detection, rage click detection, framework integrations (React/Solid), and cloud streaming support
112 lines (111 loc) • 2.72 kB
TypeScript
export type LogLevel = 'DEBUG' | 'INFO' | 'WARN' | 'ERROR';
export interface LogEntry {
id: string;
type: 'custom' | 'dead_click' | 'rage_click' | 'error';
level: LogLevel;
timestamp: string;
message?: string;
details: Record<string, any>;
metadata: LogMetadata;
}
export interface LogMetadata {
sessionId: string;
url: string;
userAgent?: string;
browserInfo?: BrowserInfo;
userId?: string;
}
export interface BrowserInfo {
name: string;
version: string;
platform: string;
}
export interface DeadClickDetails {
element: string;
selector: string;
coords: {
x: number;
y: number;
};
timeout: number;
}
export interface RageClickDetails {
clickCount: number;
element: string;
selector: string;
coords: {
x: number;
y: number;
};
duration: number;
}
export interface LoggerConfig {
logging: {
level: LogLevel;
endpoint?: string;
batchInterval: number;
batchSize: number;
maxQueueSize: number;
};
features: {
customLogs: boolean;
deadClicks: boolean;
rageClicks: boolean;
localLogFile: boolean;
eventHub: boolean;
reactSupport: boolean;
solidSupport: boolean;
};
thresholds: {
deadClickTimeout: number;
rageClickCount: number;
rageClickWindow: number;
rageClickDistance: number;
maxLogFileSize: number;
};
metadata: {
includeBrowserInfo: boolean;
anonymizeUserId: boolean;
};
localLogging: {
autoExportOnUnload: boolean;
defaultFileName: string;
};
eventHub: {
connectionString: string;
eventHubName: string;
useSasToken: boolean;
partitionKey: string;
};
frameworks: {
enableHooks: boolean;
devModeOnly: boolean;
};
}
export interface LogProcessor {
process(logs: LogEntry[]): Promise<void>;
}
export interface ClickEvent {
timestamp: number;
element: Element;
coords: {
x: number;
y: number;
};
selector: string;
}
export interface LoggerInstance {
debug(message: string, data?: Record<string, any>): void;
info(message: string, data?: Record<string, any>): void;
warn(message: string, data?: Record<string, any>): void;
error(message: string, data?: Record<string, any>): void;
custom(eventName: string, data?: Record<string, any>): void;
exportToFile(filename?: string): void;
getQueueSize(): number;
clearQueue(): void;
destroy(): void;
}
export interface InitOptions {
configPath?: string;
config?: Partial<LoggerConfig>;
}