export enum LogLevel {
ERROR = "error",
WARN = "warn",
INFO = "info",
DEBUG = "debug",
}
interface LogEntry {
level: LogLevel;
message: string;
timestamp: string;
context?: Record<string, unknown>;
}
class Logger {
constructor(private context: string = "MCP-Server") {}
private log(
level: LogLevel,
message: string,
meta?: Record<string, unknown>
) {
const entry: LogEntry = {
level,
message,
timestamp: new Date().toISOString(),
context: { service: this.context, ...meta },
};
// eslint-disable-next-line no-console
console.error(JSON.stringify(entry));
}
error(message: string, meta?: Record<string, unknown>) {
this.log(LogLevel.ERROR, message, meta);
}
warn(message: string, meta?: Record<string, unknown>) {
this.log(LogLevel.WARN, message, meta);
}
info(message: string, meta?: Record<string, unknown>) {
this.log(LogLevel.INFO, message, meta);
}
debug(message: string, meta?: Record<string, unknown>) {
this.log(LogLevel.DEBUG, message, meta);
}
}
export function createLogger(context?: string) {
return new Logger(context);
}