설치방법
npm install --save winston
npm install --save winston-daily-rotate-file
config 디렉터리에 새 파일을 생성(winston.js)
const winston = require('winston');
const winstonDaily = require('winston-daily-rotate-file');
const logDir = 'logs'; // logs 디렉토리 하위에 로그 파일 저장
const { combine, timestamp, printf } = winston.format;
// Define log format
const logFormat = printf(info => {
return `${info.timestamp} ${info.level}: ${info.message}`;
});
/*
* Log Level
* error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6
*/
const logger = winston.createLogger({
format: combine(
timestamp({
format: 'YYYY-MM-DD HH:mm:ss',
}),
logFormat
),
transports: [
// info 레벨 로그를 저장할 파일 설정
new winstonDaily({
level: 'info',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `%DATE%.log`,
maxFiles: 30, // 30일치 로그 파일 저장
zippedArchive: true,
}),
// error 레벨 로그를 저장할 파일 설정
new winstonDaily({
level: 'error',
datePattern: 'YYYY-MM-DD',
dirname: logDir + '/error', // error.log 파일은 /logs/error 하위에 저장
filename: `%DATE%.error.log`,
maxFiles: 30,
zippedArchive: true,
}),
],
});
module.exports = logger;
app.js에 logger 추가
const winston = require('./config/winston')
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
winston.error(err.status+" "+ req.method+" "+req.url+" "+err.message+ " "+ip);
res.status(err.status || 500);
res.render('error');
});
사용방법
1) 성공 시 info 로그 예시
const winston = require('./config/winston')
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
winston.info(
statusCode.OK+" "+
req.method+" "+
req.url+" "+
responseMessage.SUCCESS+ " "+
ip
);
2) 에러시 error 로그 예시
const winston = require('./config/winston')
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
winston.error(
err.status+" "+
req.method+" "+
req.url+" "+
err.message+ " "+
ip
);
로그 확인
프로젝트/logs에 날짜별로 저장되어 있음.
2020-11-27 13:14:36 info: 200 GET / 로깅 테스트 성공 ::1
2020-11-27 13:15:05 error: 404 GET /file Not Found ::1
2020-11-27 13:19:16 info: 200 GET / 메인 페이지 불러오기 성공 ::1
2020-11-27 13:19:25 info: 200 GET / 로깅 테스트 성공 ::1
2020-11-27 13:19:28 error: 404 GET /file Not Found ::1
참고
www.notion.so/winston-NodeJS-b7741350e96947a597ce44b19351af48#8580c346ff1946edb68860c0dd045476
728x90