@gabrielmaialva33/mcp-filesystem
Version:
MCP server for secure filesystem access
85 lines • 2.31 kB
JavaScript
import fs from 'node:fs/promises';
import path from 'node:path';
export class Logger {
static instance;
logFile;
logLevel = 'info';
levelPriority = {
debug: 0,
info: 1,
warn: 2,
error: 3,
};
constructor() { }
static getInstance() {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return Logger.instance;
}
setLogFile(filePath) {
this.logFile = filePath;
}
setLogLevel(level) {
this.logLevel = level;
}
shouldLog(level) {
return this.levelPriority[level] >= this.levelPriority[this.logLevel];
}
async writeLog(entry) {
if (!this.shouldLog(entry.level)) {
return;
}
const logMessage = JSON.stringify(entry);
if (entry.level === 'error' || entry.level === 'warn') {
console.error(logMessage);
}
else {
console.error(`[${entry.level.toUpperCase()}] ${entry.message}`);
}
if (this.logFile) {
try {
const logDir = path.dirname(this.logFile);
await fs.mkdir(logDir, { recursive: true }).catch(() => { });
await fs.appendFile(this.logFile, logMessage + '\n');
}
catch (error) {
console.error(`Failed to write to log file: ${error}`);
}
}
}
async debug(message, metadata) {
await this.writeLog({
timestamp: new Date().toISOString(),
level: 'debug',
message,
metadata,
});
}
async info(message, metadata) {
await this.writeLog({
timestamp: new Date().toISOString(),
level: 'info',
message,
metadata,
});
}
async warn(message, metadata) {
await this.writeLog({
timestamp: new Date().toISOString(),
level: 'warn',
message,
metadata,
});
}
async error(message, metadata) {
await this.writeLog({
timestamp: new Date().toISOString(),
level: 'error',
message,
metadata,
});
}
}
export const logger = Logger.getInstance();
//# sourceMappingURL=index.js.map