| const LEVELS = { debug: 0, info: 1, warn: 2, error: 3 }; |
| let CURRENT_LEVEL_NAME = "debug"; |
|
|
| try { |
| if (typeof window !== "undefined" && window.LOG_LEVEL) |
| CURRENT_LEVEL_NAME = String(window.LOG_LEVEL).toLowerCase(); |
| } catch {} |
|
|
| const CURRENT_LEVEL = LEVELS[CURRENT_LEVEL_NAME] ?? 0; |
|
|
| function formatTimestamp() { |
| return new Date().toISOString(); |
| } |
|
|
| function safeSerialize(v) { |
| try { |
| if (typeof v === "string") { |
| return v.length > 500 ? v.slice(0, 500) + "…" : v; |
| } |
| return v; |
| } catch { |
| return v; |
| } |
| } |
|
|
| export function createLogger(namespace) { |
| function log(level, ...args) { |
| if (LEVELS[level] >= CURRENT_LEVEL) { |
| const prefix = `[${formatTimestamp()}][${namespace}][${level.toUpperCase()}]`; |
| const out = args.map(safeSerialize); |
| if (level === "debug") console.debug(prefix, ...out); |
| else if (level === "info") console.info(prefix, ...out); |
| else if (level === "warn") console.warn(prefix, ...out); |
| else if (level === "error") console.error(prefix, ...out); |
| else console.log(prefix, ...out); |
| } |
| } |
| return { |
| debug: (...a) => log("debug", ...a), |
| info: (...a) => log("info", ...a), |
| warn: (...a) => log("warn", ...a), |
| error: (...a) => log("error", ...a), |
| }; |
| } |
|
|