export interface TracingLogger { info(log: string): void; warn(log: string): void; error(log: string): void; createChild(prefix: string): TracingLogger; } export class ConsoleTracingLogger implements TracingLogger { protected prefix: string; constructor(prefix: string) { this.prefix = prefix; } private makePrefix(level: 'info' | 'warn' | 'error'): string { return `[${new Date().toISOString()}] ${level} (${this.prefix}) > `; } public info(log: string) { console.log(this.makePrefix('info') + log); } public warn(log: string) { console.warn(this.makePrefix('warn') + log); } public error(log: string) { console.error(this.makePrefix('error') + log); } public createChild(prefix: string) { return new ConsoleTracingLogger(`${this.prefix} -> ${prefix}`); } }