UNPKG

@grasplabs/grasp

Version:

TypeScript SDK for browser automation and secure command execution in highly available and scalable cloud browser environments

136 lines 3.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = void 0; exports.initLogger = initLogger; exports.getLogger = getLogger; /** * Log levels with numeric values for comparison */ const LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3, }; /** * Logger class for structured logging */ class Logger { constructor(config) { this.config = config; this.currentLevel = LOG_LEVELS[config.level]; } /** * Formats log message with timestamp and level * @param level - Log level * @param message - Log message * @param data - Additional data to log * @returns Formatted log string */ formatMessage(level, message, data) { const timestamp = new Date().toISOString(); const dataStr = data ? ` ${JSON.stringify(data)}` : ''; return `[${timestamp}] [${level.toUpperCase()}] ${message}${dataStr}`; } /** * Logs a message if the level is enabled * @param level - Log level * @param message - Log message * @param data - Additional data to log */ log(level, message, data) { if (LOG_LEVELS[level] < this.currentLevel) { return; } const formattedMessage = this.formatMessage(level, message, data); if (this.config.console) { switch (level) { case 'debug': console.debug(formattedMessage); break; case 'info': console.info(formattedMessage); break; case 'warn': console.warn(formattedMessage); break; case 'error': console.error(formattedMessage); break; } } // TODO: Implement file logging if needed if (this.config.file) { // File logging implementation would go here } } /** * Logs debug message * @param message - Debug message * @param data - Additional data */ debug(message, data) { this.log('debug', message, data); } /** * Logs info message * @param message - Info message * @param data - Additional data */ info(message, data) { this.log('info', message, data); } /** * Logs warning message * @param message - Warning message * @param data - Additional data */ warn(message, data) { this.log('warn', message, data); } /** * Logs error message * @param message - Error message * @param data - Additional data */ error(message, data) { this.log('error', message, data); } /** * Creates a child logger with additional context * @param context - Context to add to all log messages * @returns New logger instance with context */ child(context) { const childLogger = new Logger(this.config); const originalLog = childLogger.log.bind(childLogger); childLogger.log = (level, message, data) => { originalLog(level, `[${context}] ${message}`, data); }; return childLogger; } } exports.Logger = Logger; /** * Default logger instance */ let defaultLogger; /** * Initializes the default logger * @param config - Logger configuration */ function initLogger(config) { defaultLogger = new Logger(config); } /** * Gets the default logger instance * @returns Default logger * @throws {Error} If logger is not initialized */ function getLogger() { if (!defaultLogger) { throw new Error('Logger not initialized. Call initLogger() first.'); } return defaultLogger; } //# sourceMappingURL=logger.js.map