logger middleware 생성


nest g middleware logger

CLI에 위와 같이 입력해서 ‘logger’라는 middleware를 생성할 수 있다.

logger middleware 작성


logger.middleware.ts

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

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  // nestjs는 logging을 할 때 logger라는 class를 사용
  private logger = new Logger('HTTP');

  use(req: Request, res: Response, next: () => void) {
    // express의 app.use와 비슷

    // response에 대한 결과 값도 logging
    res.on('finish', () => {
      this.logger.log(req.ip, req.method, req.originalUrl); // 요청 정보 logging
      // console.log('logger', req.ip);
      // console.log(req.url);
      this.logger.log(res.statusCode); // 반환했을 때의 정보 logging
    }); // response과 완료되었을 때의 event
    next();
  }
}

use() 는 express의 app.use 와 비슷하다.

nest.js에서는 logging 할 때 private logger = new Logger('HTTP'); 라는 logger class를 쓴다.

res.on(’finish’)의 경우(response가 끝난 경우) callback 함수 안에서 response에 대한 결과 값도 logging 할 수 있다.

ex)

 res.on('finish', () => {
      this.logger.log(req.ip, req.method, req.originalUrl); // 요청 정보 logging
      // console.log('logger', req.ip);
      // console.log(req.url);
      this.logger.log(res.statusCode); // 반환했을 때의 정보 logging
    }); // response과 완료되었을 때의 event

요청 정보 logging

this.logger.log(req.ip, req.method, req.originalUrl);