// ZCLAW 日志系统 type LogLevel = 'debug' | 'info' | 'warn' | 'error'; const LEVEL_PRIORITY: Record = { debug: 0, info: 1, warn: 2, error: 3, }; const LEVEL_COLORS: Record = { debug: '\x1b[36m', // cyan info: '\x1b[32m', // green warn: '\x1b[33m', // yellow error: '\x1b[31m', // red }; const RESET = '\x1b[0m'; let currentLevel: LogLevel = 'info'; export function setLogLevel(level: LogLevel): void { currentLevel = level; } function shouldLog(level: LogLevel): boolean { return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[currentLevel]; } function formatTimestamp(): string { return new Date().toISOString().slice(11, 23); } function log(level: LogLevel, module: string, message: string, data?: any): void { if (!shouldLog(level)) return; const color = LEVEL_COLORS[level]; const timestamp = formatTimestamp(); const prefix = `${color}[${timestamp}] [${level.toUpperCase()}] [${module}]${RESET}`; if (data !== undefined) { console.log(`${prefix} ${message}`, typeof data === 'object' ? JSON.stringify(data, null, 2) : data); } else { console.log(`${prefix} ${message}`); } } export function createLogger(module: string) { return { debug: (message: string, data?: any) => log('debug', module, message, data), info: (message: string, data?: any) => log('info', module, message, data), warn: (message: string, data?: any) => log('warn', module, message, data), error: (message: string, data?: any) => log('error', module, message, data), }; } export type Logger = ReturnType;