본문 바로가기
STUDY/NodeJS

[4-2-3] morgan 미들웨어 로그 포맷 사용자 정의하기

by Y.Choi 2023. 3. 28.
728x90
반응형

morgan 미들웨어에서 기본 포맷으로 사용하지 않고 세부적인 로그 포맷을 설정 하고 싶을 때 사용합니다.

 

'tokens' 객체 활용

 

tokens 객체는 morgan에서 제공하는 토큰들을 담고 있는 객체이며, 클라이언트의 요청 정보와 서버의 응답 정보를 토큰으로 변환할 수 있습니다.

 

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(' ')
})

위 예시의 각 토큰들은 클라이언트의 요청 정보와 서버의 응답 정보를 추출하고, join 함수를 사용하여 하나의 문자열로 합쳐져 로그로 출력됩니다.

 

출력결과는 이런식으로 나오게 되는 것입니다.

로그 포맷 출력결과

 

 

'morgan.token() 활용하기

 

morgan.token(name, fn)는 새로운 토큰을 추가할 수 있도록 해주는 메서드입니다.  이 메서드를 사용하여 사용자 지정 토큰을 생성할 수 있습니다.

 

name 토큰 이름과 그에 대한 함수 fn을 인수로 받아 새로운 토큰을 등록합니다. 이렇게 등록한 토큰은 로그 포맷 문자열 내에서 사용할 수 있습니다.

 

const express = require('express');
const morgan = require('morgan');

const app = express();

// User-Agent 헤더에서 브라우저 정보를 추출하는 토큰 생성
morgan.token('browser', function(req, res) {
  return req.headers['user-agent'].split(' ')[0];
});

// 로그 포맷 설정
const logFormat = '[:date[iso]] :method :url :status :response-time ms - :res[content-length] - :browser';

// morgan 미들웨어 등록
app.use(morgan(logFormat, { timezone: 'Asia/Seoul' }));

// 라우트 등록
app.get('/', (req, res) => {
  res.send('Hello, World!');
});

// 서버 실행
app.listen(3000, () => {
  console.log('Server listening on port 3000!');
});

 

[ User-Agent란 ]

HTTP 요청 헤더의 일부로, 웹 브라우저 또는 다른 애플리케이션에 대한 정보를 담고 있는 문자열입니다. 이 정보는 클라이언트가 서버에 HTTP 요청을 보낼 때, 서버에서 이를 파싱하여 어떤 클라이언트에서 요청이 들어왔는지를 알 수 있도록 해줍니다. User-Agent에는 사용 중인 브라우저 또는 클라이언트 애플리케이션의 이름, 버전, 운영 체제, 장치 유형 등이 포함될 수 있습니다.

 

 

 

728x90
반응형