Home morgan 모듈
Post
X

morgan 모듈

morgan에 대해 알아보자.


morgan

morgan은 HTTP 요청에 대한 로그를 남겨주는 모듈입니다.

morgan은 morgan(format, options) 형태로 미들웨어로 설정해서 사용합니다.


format

format을 설정하는 방법은 3가지가 있습니다.

  • predefined format

    미리 정의된 형식으로 설정합니다.

    • combined

      배포환경에서 주로 사용하며 불특정 다수가 접속하기 때문에 IP를 로그에 남깁니다.

      :remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"

    • common

      :remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length]

    • dev

      개발용을 위해 response에 따라 색상이 입혀진 축약된 로그를 출력합니다.

      :status값이 빨간색이면 서버 에러코드, 노란색이면 클라이언트 에러 코드, 청록색은 리다이렉션 코드, 그외 코드는 컬러가 없습니다.

      :method :url :status :response-time ms - :res[content-length]

    • short

      응답 시간을 포함한 짧은 로그를 출력합니다.

      :remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms

    • tiny

      최소화된 로그를 출력합니다.

      :method :url :status :res[content-length] - :response-time ms

    • 예시

      1
      
      app.use(morgan("combined"));
      

      morgan-01

  • predefined tokens

    미리 정의된 토큰을 이용하여 format string을 만들어 format을 설정합니다.

    즉, 사용자가 커스텀해서 사용합니다.

    • :data[option] : 현재의 UTC날짜/시간

      • option

        • clf : 일반적인 로그 포맷 (10/Oct/2000:13:55:36 +0000)
        • iso : 공통 ISO 8601 날짜/시간 포맷 (2000-10-10T13:55:36.000Z)
        • web : 공통 RFC 1123 날짜/시간 포맷 (Tue, 10 Oct 2000 13:55:36 GMT)
    • :method : 요청한 HTTP method

    • :http-version : 요청한 HTTP 버전

    • :url : 요청한 URL

    • :response-time[digits] : 요청과 응답 사이의 시간

    • :status : 응답의 상태 코드

    • 그 외 : :total-time[digits], :remote-addr, :remote-user, :res[header], :req[header]

    • 예시

      1
      2
      
      // 사용자가 커스텀 가능
      app.use(morgan(":method :url HTTP/:http-version :status"));
      

      morgan-02

  • custom format function

    토큰을 이용해서 커스텀으로 설정한 형식을 함수로 만들어 설정합니다.

    • 예시
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    app.use(
      morgan((tokens, req, res) => {
        return [
          tokens.method(req, res),
          tokens.url(req, res),
          tokens.status(req, res),
          tokens.res(req, res, "content-length"),
          "-",
          tokens["respons-time"](req, res),
          "ms",
        ].join(" ");
      })
    );
    

Options

생략 가능한 옵션부분으로 3가지 옵션이 있습니다.

  • immediate (default : false)

    출력할 로그를 request과 response 중 무엇을 기준으로 할 지를 true, fasle로 지정합니다.

    true로 설정 시 response 대신 request에 따라 로그를 작성합니다.

    서버 충돌 시에도 로그를 남기려면 request 기준으로 로그를 출력해야합니다.

  • skip (default : false)

    로그를 남길지 말지 결정하는 함수를 설정합니다.

    1
    2
    3
    4
    5
    6
    
    // 400이하의 상태 코드는 로깅을 스킵합니다.
    morgan("combined", {
      skip: function (req, res) {
        return res.statusCode < 400;
      },
    });
    
  • stream (default : process.stdout)

    로그를 출력할 위치를 지정합니다.


참조

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.