import pino from 'pino'; import pinoHttp from 'pino-http'; export const logger = pino({ prettyPrint: process.env.NODE_ENV === 'development', level: process.env.LOG_LEVEL || 'info', serializers: { err: pino.stdSerializers.err, req: pino.stdSerializers.req, }, // config for client-side logger browser: { transmit: { level: 'error', send: (_level, logEvent) => { if (typeof window !== 'undefined' && (window as any).track) { (window as any).track('error', { errorSource: 'client', errorCode: 'unknown', errorMessage: JSON.stringify(logEvent), }); } }, }, }, }); export const getHttpLogger = (opts) => { const { customProps } = opts || {}; return pinoHttp({ logger, // Define a custom request id function // genReqId: function (req) { return req.id }, // Define a custom logger level customLogLevel: function (res, err) { if (res.statusCode >= 400 && res.statusCode < 500) { return 'warn'; } else if (res.statusCode >= 500 || err) { return 'error'; } return 'debug'; }, autoLogging: true, // Define additional custom request properties customProps, }); };