로깅(Logging)이란?
로깅은 애플리케이션의 동작과 상태에 대한 정보를 기록하는 프로세스를 의미합니다. 이는 애플리케이션의 디버깅, 모니터링, 성능 평가, 사용자 트래킹 등에 도움이 됩니다.
NestJS에서는 기본적으로 내장된 로거를 제공합니다. 이 로거를 사용하여 애플리케이션의 실행과정, 에러, 중요 이벤트 등을 기록할 수 있습니다.
예외가 발생한 경우 어떻게 예외 정보를 로깅하는지에 대한 내용도 추가할 수 있습니다.
예시 코드
import { Logger, Controller, ... } from '@nestjs/common';
@Controller('reservation')
export class ReservationController {
private readonly logger = new Logger('ReservationController');
@Get('/allReservation')
getAllFestival(): Promise<ReservationEntity[]> {
this.logger.warn('Logging...'); // 여기서 로깅이 이루어짐
return this.reservationService.getAllReservation();
}
}
Logger 모듈 생성:
코드의 ReservationController 클래스 내에서 private readonly logger = new Logger('ReservationController'); 부분에서 Logger 모듈을 생성하고 있습니다.
생성자에 전달된 문자열은 로깅에 사용될 컨텍스트 이름으로, 여기서는 'ReservationController'로 설정을 했습니다.
로깅 수준 및 메시지 전달:
getAllFestival 메소드에서 this.logger.warn('Logging...'); 코드를 통해 로깅이 이루어집니다.
warn은 로그의 수준 중 하나로, 경고 메시지를 기록할 때 사용됩니다. NestJS의 Logger는 log, warn, error, debug 등 다양한 로그 수준을 지원합니다.
'Logging...'은 해당 로그 메시지의 내용으로, 실제로는 자신이 원하는 어떤 정보든 포함시킬 수 있습니다.
로깅 결과:
실행 중인 NestJS 애플리케이션에서 해당 로깅이 발생하면, 설정된 로그 수준에 따라 로그가 콘솔 또는 다른 출력 대상에 표시됩니다.
예를 들어, 위 코드에서는 warn 수준이므로 콘솔에는 경고 로그가 출력됩니다.

현재 로거 구현을 위해 일관성 유지를 위한 로거 서비스 코드와
nestJS의 종속성 주입?에 관해 로거 모듈 코드를 준비했습니다.
import { Injectable, LoggerService as NestLoggerService } from '@nestjs/common';
@Injectable()
export class LoggerService implements NestLoggerService {
debug(message: any, ...optionalParams: any[]) {
console.debug(`🐛 ${message}`, ...optionalParams);
}
warn(message: any, ...optionalParams: any[]) {
console.warn(`🚨 ${message}`, ...optionalParams);
}
log(message: any, ...optionalParams: any[]) {
console.log(`🪵 ${message}`, ...optionalParams);
}
error(message: any, ...optionalParams: any[]) {
console.error(`💥 ${message}`, ...optionalParams);
}
}
import { Module } from '@nestjs/common';
import { LoggerService } from './logger.service';
@Module({
providers: [LoggerService],
exports: [LoggerService],
})
export class LoggerModule {}
app.useLogger(app.get(LoggerService));를 통해 애플리케이션에 사용자 정의 LoggerService를 등록합니다.
이로써 애플리케이션에서 발생하는 로그는 설정된 사용자 정의 로거에 따라 처리됩니다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { LoggerService } from './logger/logger.service';
import * as config from 'config';
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
bufferLogs: true,
});
app.useLogger(app.get(LoggerService));
const serverConfig: any = config.get('server');
const port = serverConfig.port;
await app.listen(port);
}
bootstrap();
bufferLogs - NestJS앱을 생성할 때 사용되는 NestFactory.create 메서드의 옵션 중 하나로 이 옵션은 로그를 버퍼링하도록 설정하는데, 이는 애플리케이션의 로그가 생성되기 전에 버퍼에 저장되어 나중에 모아서 출력되도록 하는 동작을 의미합니다.
즉, 나중에 모아서 한번에 출력되기 때문에 로그의 순서를 보장받을 수 있습니다.