logger.ts•1.34 kB
export enum LogLevel {
DEBUG = 0,
INFO = 1,
WARN = 2,
ERROR = 3,
}
export class Logger {
private level: LogLevel;
constructor(level: string = 'info') {
this.level = LogLevel[level.toUpperCase() as keyof typeof LogLevel] || LogLevel.INFO;
}
private shouldLog(level: LogLevel): boolean {
return level >= this.level;
}
private formatMessage(level: string, message: string, meta?: any): string {
const timestamp = new Date().toISOString();
const metaStr = meta ? ` | ${JSON.stringify(meta)}` : '';
return `[${timestamp}] ${level}: ${message}${metaStr}`;
}
debug(message: string, meta?: any): void {
if (this.shouldLog(LogLevel.DEBUG)) {
console.error(this.formatMessage('DEBUG', message, meta));
}
}
info(message: string, meta?: any): void {
if (this.shouldLog(LogLevel.INFO)) {
console.log(this.formatMessage('INFO', message, meta));
}
}
warn(message: string, meta?: any): void {
if (this.shouldLog(LogLevel.WARN)) {
console.warn(this.formatMessage('WARN', message, meta));
}
}
error(message: string, error?: any): void {
if (this.shouldLog(LogLevel.ERROR)) {
console.error(this.formatMessage('ERROR', message, error));
}
}
}
// 创建默认日志实例
export const logger = new Logger(process.env.LOG_LEVEL || 'info');