@ayanaware/logger
Version:
Useful and great looking logging made easy
102 lines • 3.66 kB
JavaScript
"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