반드시 구현하도록 강제하는거임 private logger = new Logger('HTTP'); use(request: Request, response: Response, next: NextFunction): void { const { ip, method, originalUrl } = request; const userAgent = request.get('user-agent') || ''; //header에서 user-agent 있으면 가져오고 없으면 빈 문자열 response.on('finish', () => { //응답이 끝난 경우 실행 const { statusCode } = response; const contentLength = response.get('content-length'); this.logger.log( //console.log가 아니라 Logger.log or this.logger.log 사용함(후자는 new Logger(context)에서 context를 넣어준 경우 사용) //-> 이 로그가 어떤거랑 연관돼서 발생한 것인지 모르기 때문에 context로 구분하는거임 `${method} ${originalUrl} ${statusCode} ${contentLen"> 반드시 구현하도록 강제하는거임 private logger = new Logger('HTTP'); use(request: Request, response: Response, next: NextFunction): void { const { ip, method, originalUrl } = request; const userAgent = request.get('user-agent') || ''; //header에서 user-agent 있으면 가져오고 없으면 빈 문자열 response.on('finish', () => { //응답이 끝난 경우 실행 const { statusCode } = response; const contentLength = response.get('content-length'); this.logger.log( //console.log가 아니라 Logger.log or this.logger.log 사용함(후자는 new Logger(context)에서 context를 넣어준 경우 사용) //-> 이 로그가 어떤거랑 연관돼서 발생한 것인지 모르기 때문에 context로 구분하는거임 `${method} ${originalUrl} ${statusCode} ${contentLen"> 반드시 구현하도록 강제하는거임 private logger = new Logger('HTTP'); use(request: Request, response: Response, next: NextFunction): void { const { ip, method, originalUrl } = request; const userAgent = request.get('user-agent') || ''; //header에서 user-agent 있으면 가져오고 없으면 빈 문자열 response.on('finish', () => { //응답이 끝난 경우 실행 const { statusCode } = response; const contentLength = response.get('content-length'); this.logger.log( //console.log가 아니라 Logger.log or this.logger.log 사용함(후자는 new Logger(context)에서 context를 넣어준 경우 사용) //-> 이 로그가 어떤거랑 연관돼서 발생한 것인지 모르기 때문에 context로 구분하는거임 `${method} ${originalUrl} ${statusCode} ${contentLen">
import { Injectable, Logger, NestMiddleware } from "@nestjs/common";
import { Request, Response, NextFunction } from "express";
//미들웨어는 router보다 더 먼저 실행이 된다.
//그래서 라우터 시작할 때 요청을 기록하고, next()로 라우터 쪽으로 갔다가 라우터 끝나고 실행되기 때문에
//response.on 비동기를 사용한거임
@Injectable()
export class LoggerMiddleware implements NestMiddleware { //implements -> 반드시 구현하도록 강제하는거임
private logger = new Logger('HTTP');
use(request: Request, response: Response, next: NextFunction): void {
const { ip, method, originalUrl } = request;
const userAgent = request.get('user-agent') || ''; //header에서 user-agent 있으면 가져오고 없으면 빈 문자열
response.on('finish', () => { //응답이 끝난 경우 실행
const { statusCode } = response;
const contentLength = response.get('content-length');
this.logger.log( //console.log가 아니라 Logger.log or this.logger.log 사용함(후자는 new Logger(context)에서 context를 넣어준 경우 사용)
//-> 이 로그가 어떤거랑 연관돼서 발생한 것인지 모르기 때문에 context로 구분하는거임
`${method} ${originalUrl} ${statusCode} ${contentLength} - ${userAgent} ${ip}`,
);
});
next();
}
}