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