logger.ts•1.12 kB
type LogLevel = "debug" | "info" | "warn" | "error";
interface LogContext {
  [key: string]: unknown;
}
function formatContext(context?: LogContext): string {
  if (!context || Object.keys(context).length === 0) {
    return "";
  }
  try {
    return ` ${JSON.stringify(context)}`;
  } catch {
    return "";
  }
}
function write(level: LogLevel, message: string, context?: LogContext): void {
  const timestamp = new Date().toISOString();
  const payload = `[${timestamp}] [${level.toUpperCase()}] ${message}${formatContext(context)}`;
  if (level === "error") {
    console.error(payload);
  } else if (level === "warn") {
    console.warn(payload);
  } else {
    console.log(payload);
  }
}
export const logger = {
  debug(message: string, context?: LogContext): void {
    write("debug", message, context);
  },
  info(message: string, context?: LogContext): void {
    write("info", message, context);
  },
  warn(message: string, context?: LogContext): void {
    write("warn", message, context);
  },
  error(message: string, context?: LogContext): void {
    write("error", message, context);
  }
};