import pino from "pino"; import { env } from "@/env"; import { captureCmsError } from "./error-monitor"; type LogLevel = "debug" | "info" | "warn" | "error"; const level: LogLevel = (env.LOG_LEVEL as LogLevel | undefined) ?? (env.NODE_ENV === "production" ? "info" : "debug"); const isProd = env.NODE_ENV === "production"; const isTest = env.NODE_ENV === "test" || process.env.VITEST === "true"; const pinoLogger = pino({ level, base: { service: "atomcms-next" }, ...(isProd || isTest ? {} : { transport: { target: "pino-pretty", options: { colorize: true, translateTime: "SYS:standard" }, }, }), }); let requestIdCounter = 0; export function generateRequestId(): string { requestIdCounter += 1; return `${Date.now().toString(36)}-${requestIdCounter.toString(36)}`; } /** Compatibility wrapper — existing call sites use (message, meta). */ export const logger = { debug(message: string, meta: Record = {}): void { pinoLogger.debug(meta, message); }, info(message: string, meta: Record = {}): void { pinoLogger.info(meta, message); }, warn(message: string, meta: Record = {}): void { pinoLogger.warn(meta, message); }, error(message: string, meta: Record = {}): string { const error = meta.err instanceof Error ? meta.err : meta.error instanceof Error ? meta.error : new Error( typeof meta.err === "string" ? meta.err : typeof meta.error === "string" ? meta.error : message, ); const errorId = captureCmsError("server", message, error, meta); pinoLogger.error({ ...meta, errorId }, message); return errorId; }, };