feat: add logging

This commit is contained in:
2026-08-14 17:12:15 +03:00
parent 34c2b79e27
commit 25d7c5780b
25 changed files with 753 additions and 108 deletions
+25 -5
View File
@@ -1,23 +1,39 @@
import { ValidationPipe } from '@nestjs/common';
import { INestApplication, ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import cookieParser from 'cookie-parser';
import { ConfigService } from '@nestjs/config';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { Logger } from 'nestjs-pino';
import { AppModule } from './app.module';
import { HttpExceptionFilter } from './common/filters/http-exception.filter';
import { RequestLoggingMiddleware } from './common/logging/request-logging.middleware';
import { StructuredLogger } from './common/logging/structured-logger.service';
import { Environment } from './config/env.validation';
import { shouldExposeSwagger } from './config/swagger.config';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
export function configureApp(app: INestApplication): void {
const config = app.get<ConfigService<Environment, true>>(ConfigService);
const frontendOrigin = config.getOrThrow<string>('FRONTEND_ORIGIN');
app.enableCors({ origin: frontendOrigin, credentials: true });
app.useLogger(app.get(Logger));
app.enableCors({
origin: frontendOrigin,
credentials: true,
exposedHeaders: ['X-Request-ID'],
});
app.setGlobalPrefix('api/v1');
app.use(cookieParser());
const requestLogging = app.get(RequestLoggingMiddleware);
app.use(requestLogging.use.bind(requestLogging));
app.useGlobalPipes(new ValidationPipe({ transform: true, whitelist: true }));
app.useGlobalFilters(new HttpExceptionFilter());
app.enableShutdownHooks();
}
async function bootstrap() {
const app = await NestFactory.create(AppModule, { bufferLogs: true });
configureApp(app);
const config = app.get<ConfigService<Environment, true>>(ConfigService);
if (shouldExposeSwagger(process.env['NODE_ENV'])) {
const document = SwaggerModule.createDocument(
@@ -31,5 +47,9 @@ async function bootstrap() {
}
await app.listen(config.getOrThrow('PORT'));
app.get(StructuredLogger).info('application.started', {
service: 'wealth-ledger-backend',
environment: process.env['NODE_ENV'] ?? 'development',
});
}
void bootstrap();
if (require.main === module) void bootstrap();