티스토리 뷰

express

express 로그저장

kOsari 2023. 6. 4. 23:24

express의 로그를 저장하는 방법에 대해 설명한다.

Express winston morgan 로그 관리 (velog.io)

 

Express winston morgan 로그 관리

백엔드 개발자라면 반드시 해야하는 로그관리!! Express에서 로그를 관리하는 방법

velog.io

 

 

설치방법은 다음과 같다.

$ npm install --save winston winston-daily-rotate-file morgan

Nodejs 환경에서 많이 사용하는 로그 관리 모듈이다

  • winston : 로그 파일 및 로그 레벨 관리 모듈
  • winston-datily-rotate-file : 매일 날짜 별로 로그 파일 생성 및 관리 모듈 ( 시간이 지나면 자동으로 삭제 & 압축 관리 )
  • morgan : request 요청 로깅 미들웨어
const winston = require('winston') ;
const winstonDaily = require('winston-daily-rotate-file');

const { combine, timestamp, printf, colorize } = winston.format;

const logDir = 'logs';  // logs 디렉토리 하위에 로그 파일 저장

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`, // file 이름 날짜로 저장
            maxFiles: 30,  // 30일치 로그 파일 저장
            zippedArchive: true, 
        }),
      	// warn 레벨 로그를 저장할 파일 설정
        new winstonDaily({
            level: 'warn',
            datePattern: 'YYYY-MM-DD',
            dirname: logDir+ '/warn',
            filename: `%DATE%.warn.log`, // file 이름 날짜로 저장
            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,
        }),
    ],
});

logger.stream = {// morgan wiston 설정
    write: message => {
        logger.info(message);
    }
} 

// Production 환경이 아닌 경우(dev 등) 배포 환경에서는 최대한 자원을 안잡아 먹는 로그를 출력해야함
if (process.env.NODE_ENV !== 'production') {
    logger.add(new winston.transports.Console({
        format: combine(
            colorize({ all: true }), // console 에 출력할 로그 컬러 설정 적용함
            logFormat // log format 적용
        )
    }));
}

module.exports = logger;

다음과 같이 winston을 이용해 로그의 레벨을 정해준다.

위에는 레벨이 info warn error 가 존재한다.

const logger = require('./logger');
logger.info('info test');
logger.warn('warning test');
logger.error('error test');

위와 같이 입력하면 info warn error 레벨에 대한 로그를 출력할 수있다.

 

'express' 카테고리의 다른 글

Express 작업 예약 / 반복 작업  (0) 2023.06.22
express 비동기 처리  (0) 2023.06.04
aws 지역이동  (0) 2023.06.04
express helmet 적용과 설명  (0) 2023.06.04
express mysql 연동  (0) 2023.06.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함