[JavaScript] Morgan

최예닮·2022년 12월 9일
0
post-thumbnail

오늘은 Morgan 에 대해 이야기 해보고자 한다.

1. morgan 미들웨어 만들어주기

const express = require('express');
const path = require('path');
const morgan = require('morgan'); // 미들웨어 연결
 
const app = express();
app.set('port', process.env.PORT || 3000);
 
// 로그 기록
if (process.env.NODE_ENV === 'production') { 
   app.use(morgan('combined')); // 배포환경이면
} else {
   app.use(morgan('dev')); // 개발환경이면
}
 
app.get('/', (req, res) => { 
   res.send('Hello, index');
});
 
app.listen(app.get('port'), () => {
  console.log(app.get('port'), '번 포트에서 대기 중');
});

위 코드에서는 dev 를 넣었는데 이 외에 combined, common, short, tiny 등을 넣을 수 있다.

  • 개발 환경에서는 dev 를, 배포 환경에서는combined 를 이용하면 좋다.
  • app.use(morgan('combined'));
    ::1 - - [02/Nov/2021:01:36:21 +0000] "GET /about HTTP/1.1" 404 144 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36"

    이런식으로 상세하게 나오게 된다.

    2. skip

    로깅의 스킵여부를 결정하기 위한 함수이다

    morgan('combined', {
    	// 코드가 400 미만라면 함수를 리턴해 버려서 로그 기록 안함.
    	// 코드가 400 이상이면 로그 기록함
        skip : function(req, res) { return res.statusCode < 400 } 
    });
    const morgan = require("morgan");
    const logger = require("../config/tracer");
    require("dotenv").config();
    
    const format = () => {
      const result = process.env.NODE_ENV === "combined" ? "combined" : "dev";
      return result;
    };
    // 로그 작성을 위한 Output stream옵션.
    const stream = {
      write: (message) => {
        logger.info(
          message.replace(
            /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,
            ""
          )
        );
      },
    };
    // 로깅 스킵 여부 (만일 배포환경이면, 코드가 400 미만라면 함수를 리턴해 버려서 로그 기록 안함. 코드가 400 이상이면 로그 기록함)
    const skip = (_, res) => {
      if (process.env.NODE_ENV === "combined") {
        return res.statusCode < 200;
      }
      return false;
    };
    // 적용될 moran 미들웨어 형태
    const morganMiddleware = morgan(format(), { stream, skip });
    
    module.exports = morganMiddleware;

    이렇게 작성하여 API 요청을 날리면 어떻게 찍히는지 봐보자.

    이렇게 사용자가 어떤 요청을 날렸고 400 인지 200 인지도 나와서 확인할 수 있게된다. 
    profile
    산을 오르려고 하는데 이제 주차장에 막 주차한 초보개발자

    0개의 댓글