UNPKG

@ayanaware/logger

Version:

Useful and great looking logging made easy

102 lines 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Transport = void 0; const Config_1 = require("../config/Config"); const LogLevel_1 = require("../constants/LogLevel"); const LogLevelValue_1 = require("../constants/LogLevelValue"); const Formatter_1 = require("../formatter/Formatter"); const LogMeta_1 = require("../LogMeta"); class Transport { constructor(options) { this.knownLoggers = new Map(); this.options = {}; this.options = { ...(options || {}) }; this.setLevel(options.level); this.setFormatter(options.formatter); this.setLoggers(options.loggers); } setLevel(level) { if (level == null) level = LogLevel_1.LogLevel.INFO; this.options.level = level; this.knownLoggers.clear(); } setFormatter(formatter) { // Reset to default formatter if null or undefined is given if (formatter == null) { Object.defineProperty(this.options, 'formatter', { get: Transport.defaultFormatterGetter, }); return; } // Check instance if (!(formatter instanceof Formatter_1.Formatter)) throw new Error('Invalid formatter'); this.options.formatter = formatter; } setLoggers(loggers) { // Deep clone loggers so no further changes can be made if (Array.isArray(loggers)) { loggers = JSON.parse(JSON.stringify(loggers)); } else { loggers = []; } this.options.loggers = loggers; this.knownLoggers.clear(); } getAllowedLevel(logger) { if (this.knownLoggers.has(logger)) return this.knownLoggers.get(logger); let allowLevel = LogLevelValue_1.LogLevelValue[this.options.level]; const identifier = `${logger.packageName}:${logger.packagePath}${logger.name}`; for (const log of this.options.loggers) { if (log.exact && identifier !== log.name) continue; if (!log.exact && !identifier.startsWith(log.name)) continue; if (log.level === LogLevel_1.LogLevel.OFF) { allowLevel = LogLevelValue_1.LogLevelValue.OFF; break; } allowLevel = LogLevelValue_1.LogLevelValue[log.level]; break; } this.knownLoggers.set(logger, allowLevel); return allowLevel; } // tslint:disable-next-line: parameters-max-number log(origin, level, input, uniqueMarker, extra) { const allowLevel = this.getAllowedLevel(origin); if (allowLevel === LogLevelValue_1.LogLevelValue.OFF || level === LogLevel_1.LogLevel.OFF) return null; if (LogLevelValue_1.LogLevelValue[level] > allowLevel) return null; if (typeof input === 'function') input = input(); const meta = { origin, level, uniqueMarker, input, extra, [LogMeta_1.LOG_META_FORMATTER_MAP_SYMBOL]: new Map(), }; this.formatAndPrint(meta); return meta; } logMeta(meta) { const allowLevel = this.getAllowedLevel(meta.origin); if (allowLevel === LogLevelValue_1.LogLevelValue.OFF) return; this.formatAndPrint(meta); } formatAndPrint(meta) { this.print(meta, this.options.formatter.format(meta)); } static defaultFormatterGetter() { return Config_1.Config.getInstance().formatter; } } exports.Transport = Transport; //# sourceMappingURL=Transport.js.map