본문 바로가기
개발/nest.js

[nestjs] nestjs : middleware logger 사용하기

by 아크투어 2023. 8. 22.
반응형

nestjs logger

"middleware logger 설정"

middleware logger

미들웨어는 ROOT 핸들러 앞에 호출되는 함수이다.
미들웨어 기능은 등록된 순서대로 순차적으로 실행되며, 로깅, 인증, 권한 부여, 데이터 변환, 오류 처리 등의 작업을 수행할 수 있다.
미들웨어가 인터셉터보다 먼저 실행된다.
미들웨어 로그는 전역로거로 설정할수 있다.

nestjs middleware 구조
nestjs middleware 구조


https://docs.nestjs.com/middleware

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

 

Tip. configuration 기반 프로젝트 생성

아래소스전체를 확인하려면 아래링크를 참고한다.

https://arckwon.tistory.com/entry/nestjs-nestjs-typeorm-configuration-%EC%84%A4%EC%A0%95

 

[nestjs] nestjs : typeorm : configuration 설정

nestjs config 설정 "nestjs configuration yaml 사용" nestjs configuration nestjs의 configuration는 쉽게말해서 개발환경과 운영환경 분리를 위한 것이다. 흔히 Spring에서 profile 서버스 같은것이다. local, dev, prod 처럼

arckwon.tistory.com

 

1. main.ts 수정하기

src > main.ts

보통 개발환경과 운영환경으로 분리되어있다. 운영환경일때와 개발환경일때 로그 레벨에 차이를 둔다.

# src > main.ts

import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

async function bootstrap() {
  const app: NestExpressApplication = await NestFactory.create(AppModule, {
    logger:
      process.env.NODE_ENV === 'prod'
        ? ['error', 'warn', 'log']
        : ['error', 'warn', 'log', 'verbose', 'debug'],
  });

  const config: ConfigService = app.get(ConfigService);
  const port: number = config.get<number>('server.port');

  await app.listen(port, () => {
    Logger.log(`Application listening on port ${port}`);
  });
}
bootstrap();

 

2. logger.middleware.ts 생성하기

src > common > middleware > logger.middleware.ts

해당로그 기능은 전역에서 동작한다. 모든 요청과 응답프로세스 에서 로그를 발생시킨다.

import { Injectable, Logger, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  private logger = new Logger(`HTTP`);

  use(req: Request, res: Response, next: NextFunction) {
    this.logger.log(
      `Logging HTTP request ${req.method} ${req.url} ${res.statusCode}`,
    );
    next();
  }
}

 

3. app.module.ts 수정하기

src > app.module.ts

해당페이지에서 로그를 발생시킬 URL 패턴을 작성하고, 예외URL도 처리한다. test로 시작되는 url은 예외로 분류하고 그외 모든 URL에대해서 LOG를 표현한다.

import {
  Module,
  NestModule,
  RequestMethod,
  MiddlewareConsumer,
} from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfigAsync } from './config/database/typeorm.config';
import configuration from './config/profile/profile.config';

import { LoggerMiddleware } from './common/middleware/logger.middleware';

@Module({
  imports: [
    ConfigModule.forRoot({ load: [configuration] }),
    TypeOrmModule.forRootAsync(typeOrmConfigAsync),
  ],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .exclude({ path: 'test', method: RequestMethod.GET }, 'test/(.*)')
      .forRoutes({ path: '/**', method: RequestMethod.ALL });
  }
}

 

4. middleware 테스트하기

1. npm run start:dev 명령어 실행
2. 브라우저에서 http://localhost:3000 실행
3. terminal console창확인
4. 아래와 같이 LOG [HTTP] Logging ~~~ 로 표현된다.

nestjs middleware 로그
nestjs middleware 로그

 

 

반응형