import { type KittenLogger, type LogLevel } from "@purrkit/router"; import pino, { type Logger as PinoInstance } from "pino"; const isProd = process.env.NODE_ENV === "production"; const logLevel = process.env.LOG_LEVEL ? process.env.LOG_LEVEL : isProd ? "info" : "debug"; export const logger = pino({ base: { pid: false, hostname: false, }, level: logLevel.toLowerCase(), }); export class KLogger implements KittenLogger { constructor(private readonly pinoInstance: PinoInstance = logger) {} private log(level: LogLevel, msg: string, data?: Record): void { if (data) this.pinoInstance[level](data, msg); else this.pinoInstance[level](msg); } trace(msg: string, data?: Record): void { this.log("trace", msg, data); } debug(msg: string, data?: Record): void { this.log("debug", msg, data); } info(msg: string, data?: Record): void { this.log("info", msg, data); } warn(msg: string, data?: Record): void { this.log("warn", msg, data); } error(msg: string, data?: Record): void { this.log("error", msg, data); } fatal(msg: string, data?: Record): void { this.log("fatal", msg, data); } child(bindings: Record): KittenLogger { const childPino = this.pinoInstance.child(bindings); return new KLogger(childPino); } }