UNPKG

logger-services

Version:

Simple logger service with colored output using TypeScript

167 lines (166 loc) 6.17 kB
"use strict"; 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;