[NodeJs] 로그 분석하기
LOG 파일 생성 및 분석하기
forever를 이용한 로그 파일 및 winston을 이용한 로그파일 다루는 법에 대해 설명 드립니다.
forever를 이용한 로그 파일 생성
forever start -o out.log -e err.log my-script.js
forever start ./bin/www -l '/logs/nodejs/mylog.log' -o '/logs/nodejs/out.log' -e '/logs/nodejs/error.log' --spinSleepTime 10000 -c
forever start -a -l /home/ubuntu/.forever/log/graph.log graph_game.js # -a : 이미 로그 파일이 존재할 경우
- -l LOGFILE : Logs the forever output to LOGFILE
- -o OUTFILE : Logs stdout from child script to OUTFILE
- -e ERRFILE : Logs stderr from child script to ERRFILE
forever를 이용할 경우 로그파일이 너무 커지는 것을 막기위해 리눅스에서 제공하는 logrotate 같이 사용하시기를 권장드립니다.
logrotate 사용법
winston을 이용한 log 파일 저장
npm install winston winston-daily-rotate-file
아래와 같이 공용으로 사용할 js 파일을 만들어 준다.
Winston 로그파일 만들기(winston.js)
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');//
const moment = require('moment-timezone');
const logDir = 'logs'; // logs 디렉토리 하위에 로그 파일 저장
const {combine, label, printf} = winston.format; // timestamp, ms,
/*
* Log Level
* error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6
*/
const loggerSample = winston.createLogger({
level: 'info',
format: combine(
label({label: 'main'}),
appendTimestamp({tz: 'Asia/Seoul', format: 'YYYY-MM-DD HH:mm:ss'}),
logFormat
),
transports: [
// info 레벨 로그를 저장할 파일 설정
new DailyRotateFile({
level: 'info',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `sample_%DATE%.log`,
maxFiles: 10, // 10일치 로그 파일 저장
zippedArchive: false
}),
// error 레벨 로그를 저장할 파일 설정
new DailyRotateFile({
level: 'error',
datePattern: 'YYYY-MM-DD',
dirname: logDir + '/error', // error.log 파일은 /logs/error 하위에 저장
filename: `sample_%DATE%.error.log`,
maxFiles: 10,
zippedArchive: false
})
]
});
module.exports.loggerSample = loggerSample;
로그파일 사용
const {loggerSample} = require('./winston');
loggerSample.info(JSON.stringify(myObject));