import { Module } from '@nestjs/common'; import { APP_FILTER } from '@nestjs/core'; import { LoggerModule } from 'nestjs-pino'; import { ApiExceptionFilter } from './common/api-exception.filter'; import { AppConfig } from './config/app-config.service'; import { ConfigModule } from './config/config.module'; import { HealthModule } from './health/health.module'; @Module({ imports: [ ConfigModule, LoggerModule.forRootAsync({ inject: [AppConfig], useFactory: (config: AppConfig) => ({ pinoHttp: { level: config.env.LOG_LEVEL, // Human-readable logs in local development, JSON everywhere else. transport: config.env.NODE_ENV === 'development' ? { target: 'pino-pretty' } : undefined, autoLogging: config.env.NODE_ENV !== 'test', // Request bodies are never logged (operations.md logging rules). redact: { paths: ['req.headers.authorization', 'req.headers.cookie'], remove: true }, }, }), }), HealthModule, ], providers: [{ provide: APP_FILTER, useClass: ApiExceptionFilter }], }) export class AppModule {}