2 changed files with 45 additions and 13 deletions
@ -1,18 +1,46 @@ |
|||
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); // Errors should always be logged
|
|||
console.error(message, ...args); |
|||
const argsString = args.length > 0 ? " - " + safeStringify(args) : ""; |
|||
logToDb(message + argsString); |
|||
}, |
|||
}; |
|||
|
Loading…
Reference in new issue