@graisol/gpt-image-mcp
Version:
A Model Context Protocol (MCP) server for OpenAI GPT-Image-1 image generation and editing
121 lines • 4.01 kB
JavaScript
;
/**
* Logging utility for the GPT-Image-1 MCP Server
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.logger = exports.Logger = exports.LogLevel = void 0;
const promises_1 = __importDefault(require("fs/promises"));
var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
LogLevel[LogLevel["WARN"] = 1] = "WARN";
LogLevel[LogLevel["INFO"] = 2] = "INFO";
LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
})(LogLevel || (exports.LogLevel = LogLevel = {}));
class Logger {
logLevel;
logFile;
enableConsole;
constructor(options = {}) {
this.logLevel = options.logLevel ?? LogLevel.INFO;
this.logFile = options.logFile;
this.enableConsole = options.enableConsole ?? true;
}
async error(message, context, error) {
await this.log(LogLevel.ERROR, message, context, error);
}
async warn(message, context) {
await this.log(LogLevel.WARN, message, context);
}
async info(message, context) {
await this.log(LogLevel.INFO, message, context);
}
async debug(message, context) {
await this.log(LogLevel.DEBUG, message, context);
}
async log(level, message, context, error) {
if (level > this.logLevel) {
return;
}
const logEntry = {
timestamp: new Date().toISOString(),
level,
message,
context,
error,
};
if (this.enableConsole) {
this.logToConsole(logEntry);
}
if (this.logFile) {
await this.logToFile(logEntry);
}
}
logToConsole(entry) {
const levelName = LogLevel[entry.level];
const timestamp = entry.timestamp;
const message = entry.message;
let logMessage = `[${timestamp}] ${levelName}: ${message}`;
if (entry.context) {
logMessage += ` | Context: ${JSON.stringify(entry.context)}`;
}
if (entry.error) {
logMessage += ` | Error: ${entry.error.message}`;
if (entry.error.stack) {
logMessage += `\nStack: ${entry.error.stack}`;
}
}
switch (entry.level) {
case LogLevel.ERROR:
console.error(logMessage);
break;
case LogLevel.WARN:
console.warn(logMessage);
break;
case LogLevel.INFO:
console.info(logMessage);
break;
case LogLevel.DEBUG:
console.debug(logMessage);
break;
}
}
async logToFile(entry) {
if (!this.logFile)
return;
try {
const logData = JSON.stringify(entry) + '\n';
await promises_1.default.appendFile(this.logFile, logData);
}
catch (error) {
console.error('Failed to write to log file:', error);
}
}
async rotateLogs() {
if (!this.logFile)
return;
try {
const stats = await promises_1.default.stat(this.logFile);
const maxSize = 10 * 1024 * 1024; // 10MB
if (stats.size > maxSize) {
const rotatedFile = `${this.logFile}.${Date.now()}`;
await promises_1.default.rename(this.logFile, rotatedFile);
await this.info('Log file rotated', { rotatedFile });
}
}
catch (error) {
console.error('Failed to rotate logs:', error);
}
}
}
exports.Logger = Logger;
// Global logger instance
exports.logger = new Logger({
logLevel: process.env.LOG_LEVEL ? parseInt(process.env.LOG_LEVEL) : LogLevel.INFO,
logFile: process.env.LOG_FILE,
enableConsole: process.env.LOG_CONSOLE !== 'false',
});
//# sourceMappingURL=logger.js.map