본문 바로가기

project/insightLINK

[나만무] node Logging System

728x90

[나만무] node Logging System

 

개복치 서버 문제를 해결하기 위해 Logging 시스템 도입..

 

라이브러리 설치

$ npm install winston
$ npm install winston-daily-rotate-file
$ npm install app-root-path

 

server/winston/logger.js

import winston from 'winston';
import winstonDaily from '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,
    }),
  ],
});

// 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 })` 포맷으로 출력
    )
  }));
}

export { logger };

 

 

server/winston.js (테스트용)

import { logger } from './winston/logger.js';

logger.info("this is info message");
logger.error("this is error message");

logging system 폴더 구조

이제 이 코드를 이용해 서버가 왜 죽는지를 알아내야 한다!!!

 

try문에 logger.info("폴더, 함수 이름 성공 ");

catch문에 logger.info("폴더, 함수이름, error msg : ", error)" 해서 어떤 폴더/어떤 함수에서 에러가 나는지 기록해야 한다.

서버가 죽으면, 바로  log 기록 가서 확인. 해당 함수를 고치면 될것같다.

'project > insightLINK' 카테고리의 다른 글

[나만무] Next Auth, google social login 구현  (0) 2023.06.19
[나만무] 검색 기능  (0) 2023.06.19
[나만무] Google Social 로그인  (0) 2023.06.10
[나만무] 로그인 - 로그아웃  (0) 2023.06.09