@siva-sub/mcp-public-transport
Version:
A Model Context Protocol server for Singapore transport data with real-time information and routing
52 lines (51 loc) • 1.37 kB
JavaScript
class Logger {
logLevel;
constructor() {
this.logLevel = process.env.LOG_LEVEL || 'info';
}
shouldLog(level) {
const levels = {
debug: 0,
info: 1,
warn: 2,
error: 3,
};
return levels[level] >= levels[this.logLevel];
}
formatMessage(level, message, meta) {
const entry = {
timestamp: new Date().toISOString(),
level,
message,
meta,
};
return JSON.stringify(entry);
}
log(level, message, meta) {
if (!this.shouldLog(level))
return;
const formatted = this.formatMessage(level, message, meta);
// Always use stderr to avoid interfering with MCP JSON-RPC on stdout
process.stderr.write(formatted + '\n');
}
debug(message, meta) {
this.log('debug', message, meta);
}
info(message, meta) {
this.log('info', message, meta);
}
warn(message, meta) {
this.log('warn', message, meta);
}
error(message, error) {
const meta = error instanceof Error
? {
message: error.message,
stack: error.stack,
name: error.name
}
: error;
this.log('error', message, meta);
}
}
export const logger = new Logger();