export enum LogLevel {
DEBUG = 0,
INFO = 1,
WARN = 2,
ERROR = 3,
}
export class Logger {
private logLevel: LogLevel;
constructor(level: keyof typeof LogLevel = 'INFO') {
this.logLevel = LogLevel[level];
}
private shouldLog(level: LogLevel): boolean {
return level >= this.logLevel;
}
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) {
if (this.shouldLog(LogLevel.DEBUG)) {
console.error(this.formatMessage('DEBUG', message, meta));
}
}
info(message: string, meta?: any) {
if (this.shouldLog(LogLevel.INFO)) {
console.error(this.formatMessage('INFO', message, meta));
}
}
warn(message: string, meta?: any) {
if (this.shouldLog(LogLevel.WARN)) {
console.error(this.formatMessage('WARN', message, meta));
}
}
error(message: string, meta?: any) {
if (this.shouldLog(LogLevel.ERROR)) {
console.error(this.formatMessage('ERROR', message, meta));
}
}
}
export const logger = new Logger(
(process.env.LOG_LEVEL as keyof typeof LogLevel) || 'INFO'
);