본문으로 바로가기

express morgan 로깅

category Language/Node.js 2019.04.03 16:41

express 앱을 띄우면 console.log만으로는 뭔가 찍기가 힘들다.
그래서 로깅을 하려면 morgan을 써야 한다. spring boot에서는 logback을 쓰면 되는데 express에서는 morgan을 쓰면 된다.
일단 이걸 추가 하려면 npm install --save morgan으로 설치 해주면 된다.

그리고 중요한 것은 morgan에 설정을 한 구현체를 만들어줘야 한다.

logger/index.js

module.exports.stream = {
    write: function (message, encoding) {
        logger.silly(message);
    }
};

const formatMaker = function (tokens, req, res) {
  return [
    "[REQ]",
    tokens.method(req, res),
    tokens.url(req, res),
    tokens.status(req, res),
    JSON.stringify(req.body)

    // tokens.res(req, res, 'content-length'), '-',
    // tokens['response-time'](req, res), 'ms',
  ].join(' ')
};

module.exports.prod = morgan(formatMaker, {
    skip: function (req, res) {
      const url = `${req.get('host')+req.originalUrl}`;
      return url.indexOf("/health") > -1;
    }
});

module.exports.prod이거는 prod일 때 이 설정을 쓰겠다는 뜻이다. qa, dev등을 구현해주면 profile별로 다른 설정을 할 수 있다.
그리고 위 코드에서 중요한 부분은 formatMaker이 부분이다. 여기에서 내용을 바꿔주면 로그의 형식이 바뀐다.
예를들어 위 코드에서 "[REQ]" 이렇게 찍어놨는데

[REQ] POST /api/v1/hdac/hdac_get_parent_output 200 {body}

위와 같이 나온다. method, url, status, body 이렇게 네가지만 찍고 싶어서 위와 같이 세팅 했다.

app.js

var logger = require('./libs/logger');
app.use(logger.prod);

구현체는 이런식으로 불러 올 수 있다.

end.


댓글을 달아 주세요