UNPKG

sequelae-mcp

Version:

Let Claude, Cursor, and other AI agents run real SQL queries on live Postgres databases. No more copy-pasting SQL, stale schema docs, or hallucinated DB adapters — just raw, real-time access. Now with MCP support!

117 lines 3.7 kB
"use strict"; /** * Simple logger utility for structured logging * Provides JSON and text output formats */ Object.defineProperty(exports, "__esModule", { value: true }); exports.logger = exports.Logger = exports.LogLevel = void 0; var LogLevel; (function (LogLevel) { LogLevel["DEBUG"] = "debug"; LogLevel["INFO"] = "info"; LogLevel["WARN"] = "warn"; LogLevel["ERROR"] = "error"; })(LogLevel || (exports.LogLevel = LogLevel = {})); class Logger { constructor() { this.jsonMode = false; this.minLevel = LogLevel.INFO; // Check environment for log settings this.jsonMode = process.env.LOG_FORMAT === 'json'; const envLevel = process.env.LOG_LEVEL?.toLowerCase(); if (envLevel && Object.values(LogLevel).includes(envLevel)) { this.minLevel = envLevel; } } static getInstance() { if (!Logger.instance) { Logger.instance = new Logger(); } return Logger.instance; } setJsonMode(enabled) { this.jsonMode = enabled; } setMinLevel(level) { this.minLevel = level; } shouldLog(level) { const levels = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR]; const currentIndex = levels.indexOf(this.minLevel); const messageIndex = levels.indexOf(level); return messageIndex >= currentIndex; } formatEntry(level, message, data) { return { timestamp: new Date().toISOString(), level, message, ...(data && { data }), }; } output(entry) { if (this.jsonMode) { console.log(JSON.stringify(entry)); } else { const prefix = `[${entry.timestamp}] [${entry.level.toUpperCase()}]`; const message = `${prefix} ${entry.message}`; if (entry.data) { console.log(message, entry.data); } else { console.log(message); } } } debug(message, data) { if (this.shouldLog(LogLevel.DEBUG)) { this.output(this.formatEntry(LogLevel.DEBUG, message, data)); } } info(message, data) { if (this.shouldLog(LogLevel.INFO)) { this.output(this.formatEntry(LogLevel.INFO, message, data)); } } warn(message, data) { if (this.shouldLog(LogLevel.WARN)) { this.output(this.formatEntry(LogLevel.WARN, message, data)); } } error(message, data) { if (this.shouldLog(LogLevel.ERROR)) { // Always output errors to stderr const entry = this.formatEntry(LogLevel.ERROR, message, data); if (this.jsonMode) { console.error(JSON.stringify(entry)); } else { const prefix = `[${entry.timestamp}] [${entry.level.toUpperCase()}]`; const errorMessage = `${prefix} ${entry.message}`; if (entry.data) { console.error(errorMessage, entry.data); } else { console.error(errorMessage); } } } } // Special method for CLI output that should always be shown cliOutput(message) { console.log(message); } // Special method for CLI errors that should always be shown cliError(message) { console.error(message); } // Special method for table output cliTable(data) { console.table(data); } } exports.Logger = Logger; // Export singleton instance exports.logger = Logger.getInstance(); //# sourceMappingURL=logger.js.map