export enum LogLevel {
ERROR = 0,
WARN = 1,
INFO = 2,
DEBUG = 3
}
export class Logger {
private static instance: Logger;
private logLevel: LogLevel = LogLevel.INFO;
private constructor() {}
static getInstance(): Logger {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return Logger.instance;
}
setLogLevel(level: LogLevel): void {
this.logLevel = level;
}
private shouldLog(level: LogLevel): boolean {
return level <= this.logLevel;
}
private formatMessage(level: string, message: string, context?: any): string {
const timestamp = new Date().toISOString();
const contextStr = context ? ` | Context: ${JSON.stringify(context)}` : '';
return `[${timestamp}] [${level}] ${message}${contextStr}`;
}
error(message: string, context?: any): void {
if (this.shouldLog(LogLevel.ERROR)) {
console.error(this.formatMessage('ERROR', message, context));
}
}
warn(message: string, context?: any): void {
if (this.shouldLog(LogLevel.WARN)) {
console.warn(this.formatMessage('WARN', message, context));
}
}
info(message: string, context?: any): void {
if (this.shouldLog(LogLevel.INFO)) {
console.error(this.formatMessage('INFO', message, context));
}
}
debug(message: string, context?: any): void {
if (this.shouldLog(LogLevel.DEBUG)) {
console.error(this.formatMessage('DEBUG', message, context));
}
}
}
export const logger = Logger.getInstance();