/**
* Structured JSON logging with levels.
*/
export type LogLevel = "debug" | "info" | "warn" | "error";
const LOG_LEVEL_ORDER: Record<LogLevel, number> = {
debug: 0,
info: 1,
warn: 2,
error: 3,
};
const minLevel: LogLevel =
(process.env.MCP_AWS_LOG_LEVEL as LogLevel) || "info";
function shouldLog(level: LogLevel): boolean {
return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[minLevel];
}
function log(level: LogLevel, message: string, meta?: Record<string, unknown>) {
if (!shouldLog(level)) return;
const entry = {
ts: new Date().toISOString(),
level,
msg: message,
...meta,
};
const line = JSON.stringify(entry);
if (level === "error") process.stderr.write(line + "\n");
else process.stderr.write(line + "\n");
}
export const logger = {
debug: (msg: string, meta?: Record<string, unknown>) =>
log("debug", msg, meta),
info: (msg: string, meta?: Record<string, unknown>) =>
log("info", msg, meta),
warn: (msg: string, meta?: Record<string, unknown>) =>
log("warn", msg, meta),
error: (msg: string, meta?: Record<string, unknown>) =>
log("error", msg, meta),
};