Sequelize, 로그 파일 관리하기

2020. 12. 13. 23:47BACKEND/Node

안녕하세요!

오늘은 정말 간단하게 sequelize 내역을 로그 파일로 따로 관리하는 코드를 소개해드리고자 합니다.

 

정말 간단하고, 깔끔한 로그창을 확인할 수 있어요 ~.~

먼저, 관련 모듈을 설치하겠습니다 ❗️ 

 

npm i moment

 

다음엔 sequelize 모델 정의 파일으로 이동합니다.

sequelize 기본 설정으로 생기는 model/index.js 파일을 열어주세요.

 

 

🚀  model/index.js

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

 

위의 코드는 sequelize init을 하게 되면 기본적으로 생기는 파일입니다. 

여기서 아주 간단하게 몇 줄만 추가하면 됩니다.

 

const moment = require('moment');
const date = moment().format('YYYY[_]MM[_]DD');
const time = moment().format('H:mm:ss');

 

일단, 가장 먼저 위의 코드를 작성해주세요.

date와 time format은 제 스타일대로 설정해두었는데요.

date는 파일 이름으로 작성하고, time은 로그 파일에서 로그 작성 시간을 적기 위함입니다.

 

다음으로는 아래와 같은 코드를 적어주세요.

 

const log = fs.createWriteStream(`./${date}.log`, {'flags': 'a'});
log.write(`\n\n[${time}]\n`);
config.logging = msg =>  log.write(`${msg}\n`);

 

첫번째 줄부터 보면 date를 이름으로 하는 log 확장자 파일을 적고 있습니다.

다음 줄에는 time을 사용해서 현재의 시간을 표시한 후,

config.logging 에서 msg인자를 파일에 적는 코드입니다.

간단하죠?

 

이 코드는 sequelize 정의 위에 설정해주시면 됩니다.

아래와 같이요!

 

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

const moment = require('moment');
const date = moment().format('YYYY[_]MM[_]DD');
const time = moment().format('H:mm:ss');

const log = fs.createWriteStream(`./${date}.log`, {'flags': 'a'});
log.write(`\n\n[${time}]\n`);
config.logging = msg =>  log.write(`${msg}\n`);


let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

// ...

 

 

자 적용하셨으면, 결과 콘솔을 확인해볼까요❓ 

 

 

먼저 적용 전에는 위와같이 콘솔에 sequelize에서 실행되는 로그들이 보여서 깔끔하지 못했습니다.

적용 후에는 아래와 같이 로그파일에 적힙니다.

 

 

훨씬 깔끔해졌죠 !

 

 

 

📁  로그 폴더 관리

 

+ 추가 

만약 원하는 폴더 내에 특정 로그파일을 저장하고 싶다면 아래와 같은 코드를 추가하실 수 있습니다.

 

//...

const dir = './log/sequelize/';

if (!fs.existsSync(dir)) {  // 동기방식이라는 점 고려
  fs.mkdirSync(dir, {
    recursive: true         // 여러 계층의 파일 구조를 한 번에 생성가능
  });
}

const log = fs.createWriteStream(dir +`${date}.log`, {'flags': 'a'});

// ...

 

여기서 recursive 옵션은 log와 sequelize폴더를 한 번에 만들기 위함이에요.

만약, 해당 옵션이 없으면 log와 sequelize를 각각 생성하는 코드를 넣어주어야 합니다.

 

 

지금까지 로그파일을 조금 더 깔끔하게 관리할 수 있는 방법에 대해 알아보았습니다!

다음에는 sequelize model에 대해 다뤄보도록 하겠습니다 〰️