express에서의 Morgan과 비슷한 로깅을 하는 친구인데,
nest로깅 미들웨어는 API사용할 때 실시간 로그를 기록한다.
앱 모듈에서 이 로깅 미들웨어를 가져와서 사용하는 방식으로 진행하면되는데,
로깅 미들웨어는 다음과 같은 방식으로 만든다.
// src/commons/middlewares/logger.middleware.ts
import { Injectable, Logger, NestMiddleware } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
private logger = new Logger('HTTP');
use(req: Request, res: Response, next: NextFunction): void {
const { method, originalUrl } = req;
res.on('finish', () => {
const { statusCode } = res;
const contentLength = res.get('content-length');
this.logger.log(`${method} ${originalUrl} : ${statusCode} ${contentLength}`);
});
next();
}
}
그리고 위 미들웨어를 app.module에서 가져와서 쓰면 된다.
아래 내용처럼 app.module을 수정하자.
// src/app.module.ts
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { AppController } from './app.controller';
import { LoggerMiddleware } from './commons/middlewares/logger.middleware';
@Module({
imports: [],
controllers: [AppController],
})
export class AppModule implements NestModule {
// LoggerMiddleware 추가
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('*');
}
}
이제 npm run start:dev쓰면 로그가 출력됨 ㅇㅇ