mcp-connector
Version:
MCP Remote Proxy Server for Streamable HTTP with OAuth Support.
80 lines • 2.84 kB
JavaScript
import { appendFileSync, existsSync, mkdirSync } from "fs";
import { join } from "path";
import { homedir } from "os";
import { DEBUG_MODE } from "../constants/constants.js";
export class FileLogger {
logPath;
logFile;
constructor(serverName, urlHash) {
if (serverName === "default") {
this.logPath = join(homedir(), ".mcp-connector");
this.logFile = join(this.logPath, `mcp-connector-${new Date().toISOString().split("T")[0]}.log`);
}
else {
this.logPath = join(homedir(), ".mcp-connector", urlHash);
this.logFile = join(this.logPath, `${serverName}.log`);
}
this.ensureLogDirectoryExists();
}
ensureLogDirectoryExists() {
try {
if (!existsSync(this.logPath)) {
mkdirSync(this.logPath, { recursive: true });
}
}
catch {
// Soft error
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
formatMessage(level, message, data) {
const timestamp = new Date().toISOString();
const dataStr = data ? ` | Data: ${JSON.stringify(data)}` : "";
return `[${timestamp}] ${level.toUpperCase()}: ${message}${dataStr}\n`;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
writeLog(level, message, data) {
try {
const logEntry = this.formatMessage(level, message, data);
appendFileSync(this.logFile, logEntry, "utf8");
}
catch {
// Soft error
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
debug(message, data) {
if (DEBUG_MODE) {
this.writeLog("debug", message, data);
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
info(message, data) {
this.writeLog("info", message, data);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
warn(message, data) {
this.writeLog("warn", message, data);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
error(message, data) {
this.writeLog("error", message, data);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
success(message, data) {
this.writeLog("success", message, data);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
oauth(message, data) {
this.writeLog("oauth", message, data);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
progress(message, data) {
this.writeLog("progress", message, data);
}
}
export function createLogger(serverName, urlHash) {
return new FileLogger(serverName, urlHash);
}
export const logger = new FileLogger("default", "");
//# sourceMappingURL=file-logger.js.map