UNPKG

@sailboat-computer/data-storage

Version:

Shared data storage library for sailboat computer v3

161 lines (141 loc) 3.32 kB
/** * Logger utility for the data storage package */ /** * Log level */ export type LogLevel = 'debug' | 'info' | 'warn' | 'error'; /** * Logger interface */ export interface Logger { /** * Log a debug message * @param message Message to log * @param meta Additional metadata */ debug(message: string, meta?: any): void; /** * Log an info message * @param message Message to log * @param meta Additional metadata */ info(message: string, meta?: any): void; /** * Log a warning message * @param message Message to log * @param meta Additional metadata */ warn(message: string, meta?: any): void; /** * Log an error message * @param message Message to log * @param meta Additional metadata */ error(message: string, meta?: any): void; } /** * Logger options */ export interface LoggerOptions { /** * Log level * @default 'info' */ level?: LogLevel; /** * Whether to log to console * @default true */ console?: boolean; /** * Whether to log to file * @default false */ file?: boolean; /** * Path to log file */ filePath?: string; } /** * Console logger implementation */ export class ConsoleLogger implements Logger { private level: LogLevel; private component: string; private levelPriority: Record<LogLevel, number> = { debug: 0, info: 1, warn: 2, error: 3 }; /** * Create a new console logger * @param component Component name * @param options Logger options */ constructor(component: string, options: LoggerOptions = {}) { this.component = component; this.level = options.level || 'info'; } /** * Log a debug message * @param message Message to log * @param meta Additional metadata */ debug(message: string, meta?: any): void { this.log('debug', message, meta); } /** * Log an info message * @param message Message to log * @param meta Additional metadata */ info(message: string, meta?: any): void { this.log('info', message, meta); } /** * Log a warning message * @param message Message to log * @param meta Additional metadata */ warn(message: string, meta?: any): void { this.log('warn', message, meta); } /** * Log an error message * @param message Message to log * @param meta Additional metadata */ error(message: string, meta?: any): void { this.log('error', message, meta); } /** * Log a message * @param level Log level * @param message Message to log * @param meta Additional metadata */ private log(level: LogLevel, message: string, meta?: any): void { if (this.levelPriority[level] < this.levelPriority[this.level]) { return; } const timestamp = new Date().toISOString(); const formattedMessage = `[${timestamp}] [${level.toUpperCase()}] [${this.component}] ${message}`; if (meta) { console[level](formattedMessage, meta); } else { console[level](formattedMessage); } } } /** * Create a new logger * @param component Component name * @param options Logger options * @returns Logger */ export function createLogger(component: string, options: LoggerOptions = {}): Logger { return new ConsoleLogger(component, options); }