본문 바로가기

Node.js

[Node.js] exress 프로젝트 로그 관리 방법

 

프로젝트에서 로그를 관리하기 위해 로그 관리 방법에 대해서 알아봤다.

로그를 관리하는 방법으로는 로깅 모듈을 만들어서 사용하거나, 이미 만들어진 로깅 라이브러리를 사용하는 방법이 있다.

 

1. 직접 로그 관리 모듈 만들기

logger.js

// logger.js
function logRequest(user, method, url) {
  const log = `${user.email} - ${new Date().toISOString()} - ${method} ${url}`;
  console.log(log);
}

module.exports = { logRequest };

 

위에서 만든 모듈을 사용하여 미들웨어 만들기

// middleware.js
const logger = require('./logger');

// 토큰을 파싱하고 사용자 정보를 추출하는 미들웨어
function parseToken(req, res, next) {
  const token = req.headers.authorization; // 헤더에서 토큰 추출

  if (token) {
    try {
      const decoded = jwt.verify(token, "your-secret-key"); // 토큰을 복호화하여 사용자 정보 추출
      req.user = decoded;
    } catch (error) {
      // 토큰이 유효하지 않은 경우 처리
      return res.status(401).send("Unauthorized");
    }
  }

  next();
}

// 로그를 생성하고 출력하는 미들웨어
function logRequest(req, res, next) {
  if (req.user) {
    logger.logRequest(req.user, req.method, req.originalUrl);
  }

  next();
}

module.exports = { parseToken, logRequest };

 

api 라우터에서 미들웨어 사용하기

// api.js
const express = require("express");
const { parseToken, logRequest } = require("./middleware");

const router = express.Router();
router.use(parseToken);
router.use(logRequest);

router.post("/login", function (req, res) {
  // 로그인 로직
  // ...

  res.status(200).send("Login successful");
});

router.get("/download", function (req, res) {
  // 파일 다운로드 로직
  // ...

  res.status(200).send("File download successful");
});

module.exports = router;

 

 

2. 외부 로깅 라이브러리 사용하기

'winston'과 같은 로깅 라이브러리를 사용하면 쉽게 로깅 시스템을 구축할 수 있다.

외부 로깅 라이브러리를 사용하면 로그레벨, 로그 파일 관리 등을 더 세밀하게 제어할 수 있다.

 

winston을 사용한 예시

// logger.js
const winston = require('winston');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'app.log' }),
  ],
});

module.exports = logger;