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"));
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
)
- clf : 일반적인 로그 포맷 (
: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"));
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)로그를 출력할 위치를 지정합니다.