feat: add logging
This commit is contained in:
+25
-5
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user