설치
$npm install winston winston-daily-rotate-file date-utils
config 폴더 생성후
logger.js
const winston = require('winston'); const winstonDaily = require('winston-daily-rotate-file'); require('date-utils'); const logDir = 'config/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, }), ], }); // Production 환경이 아닌 경우(dev 등) if (process.env.NODE_ENV !== 'production') { logger.add(new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), // 색깔 넣어서 출력 winston.format.simple(), // `${info.level}: ${info.message} JSON.stringify({ ...rest })` 포맷으로 출력 ) })); } module.exports = logger;
app.js
다음을 추가
var log = require('./config/logger'); // 방금 추가한 logger.js // error handler app.use(function (err, req, res, next) { //log.error(req.rawHeaders); log.error("path: " + req._parsedUrl.path); log.log({ level: 'error', message: err }); log.error("\n\n"); //_parsedUrl // 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 res.status(err.status || 500); res.render('error'); });
winston 설치 : https://github.com/winstonjs/winston
댓글 ( 4)
댓글 남기기