[Node.js] Morgan

강경서·2023년 8월 18일
0
post-thumbnail

morgan

morgan은 Node.js용 HTTP request logger middleware입니다.


morgan 사용하기

morgan을 설치합니다.

npm install morgan

morgan logger middleware 함수는 주어진 format, options을 이용하여 생성합니다.

morgan(format, options)

morgan format

format은 미리 정의된 이름의 문자열, 형식 문자열, 또는 로그 항목을 생성하는 함수가 될 수 있습니다.

  • combined : 배포환경에서 사용, 불특정 다수가 접속하기 때문에 IP를 로그에 남겨줍니다.
  • common : 표준 Apache 공통 로그 출력합니다.
  • dev : 개발용을 위해 response에 따라 색상이 입혀진 축약된 로그를 출력합니다. :status값이 빨간색이면 서버 에러코드, 노란색이면 클라이언트 에러 코드, 청록색은 리다이렉션 코드, 그외 코드는 컬러가 없습니다.
  • short : 기본 설정보다 짧은 로그를 출력하고, 응답 시간을 포함합니다.
  • tiny : 최소화된 로그를 출력합니다.

로그 항목을 생성하는 커스텀 함수를 사용할 수 있습니다.

morgan(function (tokens, req, res) {
  return [
    tokens.method(req, res),
    tokens.url(req, res),
    tokens.status(req, res),
    tokens.res(req, res, 'content-length'), '-',
    tokens['response-time'](req, res), 'ms'
  ].join(' ')
})

morgan options

  • immediate : response대신 request에 따라 로그를 작성합니다. 즉 서버가 다운되더라도 request들은 기록되지만, reponse(response code, 컨텐츠 길이 등등)의 데이터는 기록할 수 없습니다.
  • skip : 로깅의 스킵여부를 결정하기 위한 함수입니다. 기본값은 false. 이 함수는 "skip(req, res)" 형식으로 호출됩니다.
morgan('combined', {
	// 코드가 400 미만라면 함수를 리턴해 버려서 로그 기록 안함.
	// 코드가 400 이상이면 로그 기록함
    skip : function(req, res) { return res.statusCode < 400 } 
});
  • stream : 로그 작성을 위한 Output stream옵션. 기본값은 process.stdout.

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'), '번 포트에서 대기 중');
});

🧾 Reference

profile
기록하고 배우고 시도하고

0개의 댓글