Files
klz-cables.com/lib/services/logging/pino-logger-service.ts
Marc Mintel f69952a5da
All checks were successful
Build & Deploy KLZ Cables / 🔍 Prepare Environment (push) Successful in 7s
Build & Deploy KLZ Cables / 🏗️ Build App (push) Successful in 4m6s
Build & Deploy KLZ Cables / 🏗️ Build Gatekeeper (push) Successful in 22s
Build & Deploy KLZ Cables / 🧪 Quality Assurance (push) Successful in 11m52s
Build & Deploy KLZ Cables / 🚀 Deploy (push) Successful in 42s
Build & Deploy KLZ Cables / ⚡ PageSpeed (push) Successful in 4m40s
Build & Deploy KLZ Cables / 🔔 Notifications (push) Successful in 1s
refactor: Enable pino-pretty transport exclusively for development environments.
2026-02-02 17:43:54 +01:00

70 lines
2.0 KiB
TypeScript

import pino, { Logger as PinoLogger } from 'pino';
import type { LoggerService } from './logger-service';
import { config } from '../../config';
export class PinoLoggerService implements LoggerService {
private readonly logger: PinoLogger;
constructor(name?: string, parent?: PinoLogger) {
if (parent) {
this.logger = parent.child({ name });
} else {
// In Next.js, especially in the Edge runtime or during instrumentation,
// pino transports (which use worker threads) can cause issues.
// We disable transport in production and during instrumentation.
const useTransport = config.isDevelopment && typeof window === 'undefined';
this.logger = pino({
name: name || 'app',
level: config.logging.level,
transport: useTransport
? {
target: 'pino-pretty',
options: {
colorize: true,
},
}
: undefined,
});
}
}
trace(msg: string, ...args: any[]) {
// @ts-expect-error - pino types can be strict
this.logger.trace(msg, ...args);
}
debug(msg: string, ...args: any[]) {
// @ts-expect-error - pino types can be strict
this.logger.debug(msg, ...args);
}
info(msg: string, ...args: any[]) {
// @ts-expect-error - pino types can be strict
this.logger.info(msg, ...args);
}
warn(msg: string, ...args: any[]) {
// @ts-expect-error - pino types can be strict
this.logger.warn(msg, ...args);
}
error(msg: string, ...args: any[]) {
// @ts-expect-error - pino types can be strict
this.logger.error(msg, ...args);
}
fatal(msg: string, ...args: any[]) {
// @ts-expect-error - pino types can be strict
this.logger.fatal(msg, ...args);
}
child(bindings: Record<string, any>): LoggerService {
const childPino = this.logger.child(bindings);
const service = new PinoLoggerService();
// @ts-expect-error - accessing private member for child creation
service.logger = childPino;
return service;
}
}