@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
JavaScript
;
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