Nodejs

 

설치

$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

 

 

 

 

about author

PHRASE

Level 60  라이트

마른 나무에 물 날까 , 원인 없는 결과는 있을 수 없다는 뜻.

댓글 ( 4)

댓글 남기기

작성

Nodejs 목록    more