본문 바로가기
개발정리 (nodeJS)

[nodeJS] Node.js에서 로그 관리하기

by 할리갈리0 2024. 7. 15.

효율적인 로깅과 모니터링 시스템은 애플리케이션의 안정성과 성능을 유지하는 데 필수적입니다. 이를 통해 서버의 상태를 실시간으로 파악하고, 오류를 빠르게 감지하며, 성능 문제를 진단할 수 있습니다. 이번 포스팅에서는 Winston을 사용하여 Node.js 애플리케이션의 로그를 관리하는 방법을 설명하겠습니다.

 

1. 로깅 필요성

로깅 : 애플리케이션의 동작을 기록하는 과정

개발자는 애플리케이션의 상태를 파악하고, 발생한 오류를 진단하며, 성능분석 가능

  • 디버깅: 애플리케이션에서 발생하는 오류를 추적하고 해결하기 위해 도움
  • 성능 분석: 애플리케이션의 성능을 모니터링하고 병목 지점을 식별 가능
  • 보안: 보안 이벤트를 기록하고 분석하여 잠재적인 위협 감지

2. Winston 기본 설정

Node.js의 강력하고 유연한 로깅 라이브러리

npm install winston


[기본 설정]

콘솔과 파일에 로그를 기록하는 Winston 로거를 설정

오류 로그는 logs/error.log 파일에, 모든 로그는 logs/combined.log 파일에 기록

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

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
    new winston.transports.File({ filename: 'logs/combined.log' })
  ]
});

module.exports = logger;

 

3. Winston을 사용한 로그 관리

Winston은 다양한 로그 레벨을 제공

logger.error('This is an error log');
logger.warn('This is a warning log');
logger.info('This is an info log');
logger.debug('This is a debug log');

 

[커스텀 포맷 사용]

로그 메시지에 타임스탬프를 추가하고, 커스텀 포맷을 사용하여 로그를 출력

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, printf } = format;

const customFormat = printf(({ level, message, timestamp }) => {
  return `${timestamp} [${level}]: ${message}`;
});

const logger = createLogger({
  format: combine(
    timestamp(),
    customFormat
  ),
  transports: [
    new transports.Console(),
    new transports.File({ filename: 'logs/combined.log' })
  ]
});

 

이번 포스팅에서는 Node.js에서 Winston을 사용해 로그를 관리하는 방법을 살펴보았습니다. Winston을 사용해 효율적인 로그 관리를 할 수 있습니다. 이를 통해 더욱 견고한 Node.js 애플리케이션을 개발해 보세요.

반응형