UNPKG

@dataql/node

Version:

DataQL core SDK for unified data management with MongoDB and GraphQL - Production Multi-Cloud Ready

113 lines (112 loc) 3.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PluginLoggerImpl = void 0; /** * Logger implementation for DataQL plugins * * Provides structured logging with different levels and contextual information. * Each plugin gets its own logger instance with proper context. */ class PluginLoggerImpl { constructor(context = {}) { if (typeof context === "string") { this.context = { component: context }; } else { this.context = { ...context }; } } /** * Log debug message */ debug(message, meta) { this.log("DEBUG", message, meta); } /** * Log info message */ info(message, meta) { this.log("INFO", message, meta); } /** * Log warning message */ warn(message, meta) { this.log("WARN", message, meta); } /** * Log error message */ error(message, meta) { this.log("ERROR", message, meta); } /** * Create a child logger with additional context */ child(context) { return new PluginLoggerImpl({ ...this.context, ...context, }); } /** * Private: Core logging method */ log(level, message, meta) { const timestamp = new Date().toISOString(); const logData = { timestamp, level, message, context: this.context, ...(meta && { meta }), }; // In a real implementation, you might want to: // - Send to external logging service // - Format differently based on environment // - Add more structured data // - Buffer logs for performance const formattedMessage = this.formatMessage(logData); 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; default: console.log(formattedMessage); } } /** * Private: Format log message */ formatMessage(logData) { const { timestamp, level, message, context, meta } = logData; let formatted = `[${timestamp}] ${level}: ${message}`; // Add context information if (context && Object.keys(context).length > 0) { const contextStr = Object.entries(context) .map(([key, value]) => `${key}=${value}`) .join(" "); formatted += ` [${contextStr}]`; } // Add metadata if present if (meta) { if (typeof meta === "object") { formatted += ` ${JSON.stringify(meta)}`; } else { formatted += ` ${meta}`; } } return formatted; } } exports.PluginLoggerImpl = PluginLoggerImpl;