효율적인 로깅과 모니터링 시스템은 애플리케이션의 안정성과 성능을 유지하는 데 필수적입니다. 이를 통해 서버의 상태를 실시간으로 파악하고, 오류를 빠르게 감지하며, 성능 문제를 진단할 수 있습니다. 이번 포스팅에서는 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 애플리케이션을 개발해 보세요.
반응형
'개발정리 (nodeJS)' 카테고리의 다른 글
[nodeJS] Node.js에서 TypeScript 사용하기 (0) | 2024.08.06 |
---|---|
[nodeJS] Node.js에서 서버사이드 렌더링(SSR) 구현하기 (0) | 2024.08.02 |
[nodeJS] Node.js로 tRPC API 만들기 (0) | 2024.07.11 |
[nodeJS] Node.js에서 대규모 파일 업로드 처리하기 (0) | 2024.06.28 |
[nodeJS] Node.js에서 세션 관리 구현하기 (0) | 2024.05.29 |