logger-services
Version:
Simple logger service with colored output using TypeScript
167 lines (166 loc) • 6.17 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoggerService = exports.ELogStage = exports.ELogLevels = void 0;
const chalk_1 = __importDefault(require("chalk"));
const moment_1 = __importDefault(require("moment"));
const ora_1 = __importDefault(require("ora"));
var ELogLevels;
(function (ELogLevels) {
ELogLevels["error"] = "[ERROR]";
ELogLevels["warn"] = "[WARNING]";
ELogLevels["info"] = "[INFO]";
ELogLevels["http"] = "[HTTP]";
ELogLevels["debug"] = "[DEBUG]";
})(ELogLevels || (exports.ELogLevels = ELogLevels = {}));
var ELogStage;
(function (ELogStage) {
ELogStage["start"] = "[START]";
ELogStage["end"] = "[END]";
})(ELogStage || (exports.ELogStage = ELogStage = {}));
class LoggerService {
constructor(config, clear) {
this.env = null;
this.loggerPrefix = null;
this.app_debug = false;
this.spinnerInstance = null;
this.spinnerTimeout = null;
this.utils = {
chalk: chalk_1.default
};
if (config) {
this.init(config, clear);
}
}
init(config, clear) {
if (clear) {
this.env = null;
this.loggerPrefix = null;
this.app_debug = false;
return;
}
this.env = config.env ?? null;
this.loggerPrefix = config.loggerPrefix ?? null;
this.app_debug = config.app_debug ?? false;
}
formatPrefix(level) {
const levelStr = `${level} |`;
const envStr = this.env ? `[${this.env}]` : '';
const prefixStr = this.loggerPrefix ?? '';
const detail = [envStr, prefixStr].filter(Boolean).join(' - ');
return detail ? `${levelStr} ${detail} -` : levelStr;
}
formatSpinnerMessage(level, message, isSuccessOrFail = false) {
const pad = isSuccessOrFail ? '' : ' ';
const prefix = chalk_1.default.green(this.formatPrefix(level));
return `${pad}${prefix} ${message}`;
}
loggerConfig(level, ...str) {
if (str.length === 0)
return;
const mappingStr = [];
for (const itemStr of str) {
let convertToString = '';
try {
if (itemStr instanceof Error) {
convertToString = itemStr.stack || itemStr.message;
}
else if (typeof itemStr !== 'string') {
convertToString = JSON.stringify(itemStr, null);
}
else {
convertToString = itemStr;
}
}
catch (err) {
convertToString = '[Logger stringify failed]';
}
mappingStr.push(convertToString);
}
const fullStr = mappingStr.join(' - ');
const timestamp = (0, moment_1.default)().format('YYYY-MM-DD HH:mm:ss');
const prefix = this.formatPrefix(level);
switch (level) {
case ELogLevels.info:
return console.log(chalk_1.default.green(prefix), fullStr);
case ELogLevels.warn:
return console.log(chalk_1.default.yellow(prefix), fullStr);
case ELogLevels.debug:
if (this.app_debug) {
return console.log(chalk_1.default.magenta(prefix), fullStr);
}
break;
case ELogLevels.error:
return console.log(chalk_1.default.red(`${prefix} [${timestamp}]`), fullStr);
default:
return console.log(chalk_1.default.red('[ERROR] - [logLevel] - [NOT FOUND]'));
}
}
info(...str) {
return this.loggerConfig(ELogLevels.info, ...str);
}
warn(...str) {
return this.loggerConfig(ELogLevels.warn, ...str);
}
error(...str) {
return this.loggerConfig(ELogLevels.error, ...str);
}
debug(...str) {
return this.loggerConfig(ELogLevels.debug, ...str);
}
handleTimeout(timeout) {
if (this.spinnerTimeout)
clearTimeout(this.spinnerTimeout);
if (timeout && timeout > 0) {
this.spinnerTimeout = setTimeout(() => {
if (this.spinnerInstance && this.spinnerInstance.isSpinning) {
this.spinnerInstance.stop();
this.spinnerInstance = null;
}
}, timeout);
}
}
get spinner() {
const self = this;
return {
start(text, timeout) {
self.spinnerInstance = (0, ora_1.default)({
text: self.formatSpinnerMessage(ELogLevels.info, text),
}).start();
self.handleTimeout(timeout);
},
update(text, timeout) {
if (self.spinnerInstance) {
self.spinnerInstance.text = self.formatSpinnerMessage(ELogLevels.info, text);
self.handleTimeout(timeout);
}
},
success(text, timeout) {
if (self.spinnerInstance) {
self.spinnerInstance.succeed(self.formatSpinnerMessage(ELogLevels.info, text ?? '', true));
self.spinnerInstance = null;
self.handleTimeout(timeout);
}
},
fail(text, timeout) {
if (self.spinnerInstance) {
self.spinnerInstance.fail(self.formatSpinnerMessage(ELogLevels.error, text ?? '', true) // Removing padding for fail
);
self.spinnerInstance = null;
self.handleTimeout(timeout);
}
},
stop() {
if (self.spinnerTimeout)
clearTimeout(self.spinnerTimeout);
if (self.spinnerInstance) {
self.spinnerInstance.stop();
self.spinnerInstance = null;
}
}
};
}
}
exports.LoggerService = LoggerService;