export enum AmplitudeLogLevel { verbose = 0, debug = 1, warn = 2, error = 3, none = 4, } export interface AmplitudeLogger { disable(): void; enable(logLevel: AmplitudeLogLevel): void; log(...args: any[]): void; warn(...args: any[]): void; error(...args: any[]): void; debug(...args: any[]): void; } export class Logger implements AmplitudeLogger { private prefix: string; private currentLogLevel: AmplitudeLogLevel = AmplitudeLogLevel.debug; constructor(name: string = 'AmplitudeEngagementSwift') { this.prefix = `[${name}]`; } disable(): void { this.currentLogLevel = AmplitudeLogLevel.none; } enable(logLevel: AmplitudeLogLevel): void { this.currentLogLevel = logLevel; } log(...args: any[]): void { if (this.currentLogLevel <= AmplitudeLogLevel.verbose) { console.info(this.format(args, 'INFO')); } } warn(...args: any[]): void { if (this.currentLogLevel <= AmplitudeLogLevel.warn) { console.warn(this.format(args, 'WARNING')); } } error(...args: any[]): void { if (this.currentLogLevel <= AmplitudeLogLevel.error) { console.error(this.format(args, 'ERROR')); } } debug(...args: any[]): void { if (this.currentLogLevel <= AmplitudeLogLevel.debug) { console.debug(this.format(args, 'DEBUG')); } } private format( args: any[], level: 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR' ): string { const message = args.map((a) => String(a)).join(' '); const emoji = { DEBUG: '🔍', INFO: 'â„šī¸', WARNING: 'âš ī¸', ERROR: '🔴', }[level]; return `${this.prefix} ${emoji} ${level}: ${message}`; } }