/**
* 日志工具模块
*/
type LogLevel = 'debug' | 'info' | 'warn' | 'error';
const LOG_LEVELS: Record<LogLevel, number> = {
debug: 0,
info: 1,
warn: 2,
error: 3,
};
class Logger {
private level: LogLevel = 'info';
setLevel(level: string): void {
if (level in LOG_LEVELS) {
this.level = level as LogLevel;
}
}
private shouldLog(level: LogLevel): boolean {
return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
}
private format(level: LogLevel, message: string, meta?: Record<string, unknown>): string {
const timestamp = new Date().toISOString();
const metaStr = meta ? ` ${JSON.stringify(meta)}` : '';
return `[${timestamp}] [${level.toUpperCase()}] ${message}${metaStr}`;
}
debug(message: string, meta?: Record<string, unknown>): void {
if (this.shouldLog('debug')) {
const formatted = this.format('debug', message, meta);
console.error(formatted);
}
}
info(message: string, meta?: Record<string, unknown>): void {
if (this.shouldLog('info')) {
const formatted = this.format('info', message, meta);
console.error(formatted);
}
}
warn(message: string, meta?: Record<string, unknown>): void {
if (this.shouldLog('warn')) {
const formatted = this.format('warn', message, meta);
console.error(formatted);
}
}
error(message: string, meta?: Record<string, unknown>): void {
if (this.shouldLog('error')) {
const formatted = this.format('error', message, meta);
console.error(formatted);
}
}
}
export const logger = new Logger();