synaptra
Version:
A high-performance Model Context Protocol server for GraphQL APIs with advanced features, type-safety, and developer experience improvements
72 lines • 2.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = exports.getLogger = exports.createLogger = void 0;
const winston_1 = __importDefault(require("winston"));
const chalk_1 = __importDefault(require("chalk"));
class Logger {
winston;
config;
constructor(config) {
this.config = config;
this.winston = winston_1.default.createLogger({
level: config.level,
format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.errors({ stack: true }), winston_1.default.format.json()),
transports: [
new winston_1.default.transports.Console({
format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple(), winston_1.default.format.printf((info) => {
const ts = new Date(info.timestamp).toISOString();
const { timestamp: _timestamp, level, message, ...meta } = info;
const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
return `${chalk_1.default.gray(ts)} ${level}: ${message}${metaStr}`;
})),
}),
],
});
}
error(message, meta) {
this.winston.error(message, meta);
}
warn(message, meta) {
this.winston.warn(message, meta);
}
info(message, meta) {
this.winston.info(message, meta);
}
debug(message, meta) {
this.winston.debug(message, meta);
}
query(query, variables) {
if (this.config.enableQueries) {
this.debug(`GraphQL Query: ${query}`, { variables });
}
}
performance(operation, duration, meta) {
if (this.config.enablePerformance) {
const formattedDuration = duration < 1000 ? `${duration}ms` : `${(duration / 1000).toFixed(2)}s`;
this.info(`Performance: ${operation} took ${formattedDuration}`, meta);
}
}
updateConfig(config) {
this.config = { ...this.config, ...config };
this.winston.level = this.config.level;
}
}
exports.Logger = Logger;
// Singleton logger instance
let logger;
const createLogger = (config) => {
logger = new Logger(config);
return logger;
};
exports.createLogger = createLogger;
const getLogger = () => {
if (!logger) {
throw new Error('Logger not initialized. Call createLogger first.');
}
return logger;
};
exports.getLogger = getLogger;
//# sourceMappingURL=logger.js.map