import { Module } from '@nestjs/common'; import { NestApplication } from '@nestjs/core'; import { LoggerModule } from 'nestjs-pino'; import { LoggerConfig, loggerConfig } from './logger.config'; import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forFeature(loggerConfig), LoggerModule.forRootAsync({ imports: loggerConfig.asProvider().imports, useFactory: (loggerConfig: LoggerConfig) => ({ pinoHttp: { autoLogging: true, quietReqLogger: true, quietResLogger: true, level: 'trace', useLevel: 'trace', mixin() { return { context: NestApplication.name }; }, customSuccessMessage: (req, res) => { return `${req.method} ${req.url}: ${res.statusCode} request succedeed` }, customErrorMessage: (req, res) => { return `${req.method} ${req.url}: ${res.statusCode} request errored` }, name: 'ebitemp-api', transport: { targets: [ ...(process.env['NODE_ENV'] !== 'production' ? [ { target: 'pino-pretty', level: 'debug', options: { colorize: true, messageFormat: '[{context}] {msg}', ignore: 'pid,hostname,context', translateTime: 'SYS:yyyy-mm-dd HH:MM:ss o', }, }, ] : []), { target: '@autotelic/pino-seq-transport', level: 'trace', options: { loggerOpts: { serverUrl: `${loggerConfig.seqServerHost}:${loggerConfig.seqServerPort}`, apiKey: loggerConfig.seqApiKey, }, }, }, ], }, }, }), inject: [loggerConfig.KEY], }), ], }) export class AppLoggerModule {}