import { logToDb } from "../db"; function safeStringify(obj: unknown) { const seen = new WeakSet(); return JSON.stringify(obj, (key, value) => { if (typeof value === "object" && value !== null) { if (seen.has(value)) { return "[Circular]"; } seen.add(value); } if (typeof value === "function") { return `[Function: ${value.name || "anonymous"}]`; } return value; }); } export const logger = { log: (message: string, ...args: unknown[]) => { if (process.env.NODE_ENV !== "production") { // eslint-disable-next-line no-console console.log(message, ...args); const argsString = args.length > 0 ? " - " + safeStringify(args) : ""; logToDb(message + argsString); } }, warn: (message: string, ...args: unknown[]) => { if (process.env.NODE_ENV !== "production") { // eslint-disable-next-line no-console console.warn(message, ...args); const argsString = args.length > 0 ? " - " + safeStringify(args) : ""; logToDb(message + argsString); } }, error: (message: string, ...args: unknown[]) => { // Errors will always be logged // eslint-disable-next-line no-console console.error(message, ...args); const argsString = args.length > 0 ? " - " + safeStringify(args) : ""; logToDb(message + argsString); }, };