onirii
Version:
Universal queue SDK
100 lines (99 loc) • 3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LogFactory = void 0;
const tslib_1 = require("tslib");
const log4js = require("log4js");
const env = (0, tslib_1.__importStar)(require("dotenv"));
const fs = (0, tslib_1.__importStar)(require("fs"));
// load env config
env.config();
/**
* Log factory for create log instance
*
* @since 1.0.0
* @date 2021-06-01
* @author Luminous(BGLuminous)
*/
class LogFactory {
/**
* Re-flash log4js configure and create new logger instance (this key config already exist only creat logger instace)
*
* @param {string} key new logger key
* @return {Logger} logger instance
*/
static create(key) {
// check log dir
if (!this.dirReady) {
if (!fs.existsSync(this.currentPath)) {
fs.mkdirSync(this.currentPath);
}
this.dirReady = true;
}
// check if exist return logger instance
if (Object.keys(this.config.appenders).includes(key, 0)) {
return log4js.getLogger(key);
}
// add new config
this.config.appenders = Object.assign(this.config.appenders, LogFactory.generateAppender(key));
this.config.categories = Object.assign(this.config.categories, LogFactory.generateCategories(key));
log4js.configure(this.config);
return log4js.getLogger(key);
}
/**
* Generate new appender config
*
* @param {string} key new logger key
* @return {{[p: string]: {filename: string, keepFileExt: boolean, pattern: string, type: string, encoding: string}}}
* @private
*/
static generateAppender(key) {
return {
[key]: {
type: 'dateFile',
filename: `${this.currentPath}/onirii-${key}.log`,
pattern: '.yyyy-MM-dd',
keepFileExt: true,
encoding: 'UTF-8',
},
};
}
/**
* Generate new categories config
*
* @param {string} key new logger key
* @return {{[p: string]: {level: string, appenders: string[]}}}
* @private
*/
static generateCategories(key) {
return {
[key]: {
appenders: [`${key}`, 'console'],
level: 'debug',
},
};
}
}
exports.LogFactory = LogFactory;
// log path
LogFactory.currentPath = process.env.LOG_PATH ? process.env.LOG_PATH : './';
// current config
LogFactory.config = {
appenders: {
console: { type: 'console', layout: { type: 'colored' } },
default: {
type: 'dateFile',
filename: `${LogFactory.currentPath}/onirii.log`,
pattern: '.yyyy-MM-dd',
keepFileExt: true,
encoding: 'UTF-8',
},
},
categories: {
default: {
appenders: [`default`, 'console'],
level: 'debug',
},
},
};
// log dir ready?
LogFactory.dirReady = false;