2020. 12. 13. 23:47ㆍBACKEND/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에 대해 다뤄보도록 하겠습니다 〰️
'BACKEND > Node' 카테고리의 다른 글
Sequelize, 관계 정의하기 (0) | 2020.12.20 |
---|---|
Node.js + Swagger, 어렵지 않게 사용하기 (3) | 2020.12.06 |
Sequelize, 초기 설정 (0) | 2020.11.22 |
Express + Multer, 어렵지 않게 사용하기 - S3 (4) | 2020.06.03 |
Express + Multer, 어렵지 않게 사용하기 (10) | 2020.05.27 |
Backend Software Engineer
𝐒𝐮𝐧 · 𝙂𝙮𝙚𝙤𝙣𝙜𝙨𝙪𝙣 𝙋𝙖𝙧𝙠