728x90
반응형
- 로그는 시스템을 운영할 때 발생하는 모든 데이터를 말한다.
로그를 관리하는 데 사용하는 가장 대표적인 Node.js 모듈인 winston(https://npmjs.com/package/winston)을 사용해 로그 관리
- winston을 터미널에서 명령어를 통해 설치
npm install winston
- Node.js로 서버를 구축해 사용하면서 로그를 정밀히 관리하지 않고 단순히 콘솔로 로그를 출력하는 경우가 많은데,
그러면 콘솔 화면을 계속 볼 수도 없고 콘솔을 통해 확인 가능한 글자의 수도 제한적이기에 이미 지난 오류에 대한 추적이 어렵다. - 로그는 시스템을 운영하면서 예기치 못한 오류 혹은 치명적인 장애가 발생했을 때 장애 원인을 추적하고 시스템을 안정적으로
운영하기 위해 제대로 관리해야 한다.
const winston = require('winston'); // winston 모듈
const winstonDaily = require('winston-daily-rotate-file'); // 로그파일을 일자별로 생성
const appRoot = require('app-root-path'); // app root 경로를 가져오는 lib
const process = require('process');
const logDir = `${apRoot}/logs`; // logs 디렉토리 하위에 로그 파일 저장
const {combine, timestamp, label, printf} = winston.format;
const logFormat = printf(({level, message, label, timestamp}) => {
return `${timestamp} [${label}] ${level}: ${message}`; // 로그 출력 포맷 정의
});
const logger = winston.createLogger({
format: combine(
label({
lable: 'System Name'
}),
timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
logFormat
),
transports: [
new winstonDaily({ // info 레벨 로그를 저장할 파일 설정
level: 'info',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `%DATE%.log`,
maxFiles: 30, // 최근 30일치 로그 파일만 저장
zippedArchiv: true
}),
new winstonDaily({
level: 'error',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `%DATE%.error.log`,
maxFiles: 30, // 최근 30일치 로그 파일만 저장
zippedArchiv: true
})
],
exceptionHandlers: [ // uncaughtException 발생시
new winstonDaily({
level: 'error',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `%DATE%.exception.log`,
maxFiles: 30, // 최근 30일치 로그 파일만 저장
zippedArchiv: true
})
]
})
// 운영 환경이 아닌 경우 콘솔로도 로그 출력
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize(), // 색상 넣어서 출력
winston.format.simple() // 간단한 포맷으로 출력
)
}));
}
module.exports = logger;
728x90
반응형
'Runtime > Node.js' 카테고리의 다른 글
22. 메일링 서비스(이메일 보내기) (2) | 2023.04.18 |
---|---|
21. 메일링 서비스(Nodemailer) (7) | 2023.04.18 |
19. MongoDB(스키마, 모델 생성) (2) | 2023.04.14 |
18. MongoDB(mongoose 모듈) (5) | 2023.04.10 |
17. MongoDB(툴 설치 및 준비) (3) | 2023.04.10 |