[NestJS] 로그

soyeon·2023년 4월 17일

Nest

목록 보기
9/10
post-thumbnail

애플리케이션을 운영할 때 에러가 날 때가 많은데 이때 어디 부분이 문제인지 빠르고 정확하게 파악하기 위해서는 어떤 곳에서 에러가 어떻게 나고 있는지 보기 위해 로그를 보는 것이 중요하다.

이번에는 로그에 대해서 알아보자.

로그의 종류

  • Log - 중요한 정보의 범용 로깅
  • Warning - 경고에 대한 내용
  • Error - 에러에 대한 내용
  • Debug - 오류 발생 시 로직을 디버그하는데 도움이 되는 유용한 정보(개발자용)
  • Verbose - 응용 프로그램의 동작에 대한 통찰력을 제공하는 정보(운영자용)

애플리케이션에 로그 넣기

원래는 하나의 기능을 만들때마다 로그를 붙이는 것이라고 한다.
다음부터 만들면서 로그를 넣도록 해보자.

Nest에서 logger 클래스를 사용하여 로그를 남겨보자.

애플리케이션 실행할때

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const port = 3000;
  await app.listen(port);
  Logger.log(`Application running in port ${port}`);
}
bootstrap();

확인!

조회할때 로그 남기기

@Controller('boards')
@UseGuards(AuthGuard())
export class BoardsController {
  private logger = new Logger(`BoardsController`); // 모듈
  constructor(private boardsService: BoardsService) {}

  @Get()
  getAllBoard(@GetUser() user: User): Promise<Board[]> {
    this.logger.verbose(`User ${user.username} trying to get all boards`); // verbose 로그 남김
    return this.boardsService.getAllBoard(user);
  }
  ...

생성할때 로그 남기기

...
@Post()
  @UsePipes(ValidationPipe)
  createBoard(
    @Body() createBoardDto: CreateBoardDto,
    @GetUser() user: User,
  ): Promise<Board> {
    this.logger.verbose(
      `User ${user.username} creating a new board. Payload: ${JSON.stringify(
        createBoardDto,
      )}`,
    );
    return this.boardsService.createBoard(createBoardDto, user);
  }
...

더보기

로거에 대해서 실무에서 많이 다뤄보지 않아서 찾아봤는데
원래는 입맛에 맞게 밑바닥부터 새롭게 구현하지만 @nestjs/common의 내장된 LoggerService를 사용하여 구현하니 정말 편한것같다.

심지어 nestjs 애플리케이션을 실행할때 터미널에 주르륵 하고 뜨는 글씨들도 로그다..!

다음에 프로젝트를 진행할때 로그를 적용하면서 따로 포스팅하는 것도 좋을것같다.

profile
사부작 사부작

0개의 댓글