typescript-logging
Version:
Library for logging, written in typescript, can be used by normal es5+ javascript as well.
109 lines • 5.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var DataStructures_1 = require("../../utils/DataStructures");
var LoggerOptions_1 = require("../LoggerOptions");
var ConsoleLoggerImpl_1 = require("./ConsoleLoggerImpl");
var MessageBufferLoggerImpl_1 = require("./MessageBufferLoggerImpl");
var AbstractLogger_1 = require("./AbstractLogger");
var LogGroupRuntimeSettings_1 = require("./LogGroupRuntimeSettings");
var LoggerFactoryImpl = (function () {
function LoggerFactoryImpl(name, options) {
this._loggers = new DataStructures_1.SimpleMap();
this._logGroupRuntimeSettingsIndexed = [];
this._loggerToLogGroupSettings = new DataStructures_1.SimpleMap();
this._name = name;
this.configure(options);
}
LoggerFactoryImpl.prototype.configure = function (options) {
this._options = options;
// Close any current open loggers.
this.closeLoggers();
this._loggerToLogGroupSettings.clear();
this._logGroupRuntimeSettingsIndexed = [];
var logGroupRules = this._options.logGroupRules;
/* tslint:disable:prefer-for-of */
for (var i = 0; i < logGroupRules.length; i++) {
this._logGroupRuntimeSettingsIndexed.push(new LogGroupRuntimeSettings_1.LogGroupRuntimeSettings(logGroupRules[i]));
}
/* tslint:enable:prefer-for-of */
};
LoggerFactoryImpl.prototype.getLogger = function (named) {
if (!this._options.enabled) {
throw new Error("LoggerFactory is not enabled, please check your options passed in");
}
var logger = this._loggers.get(named);
if (typeof logger !== "undefined") {
return logger;
}
// Initialize logger with appropriate level
logger = this.loadLogger(named);
this._loggers.put(named, logger);
return logger;
};
LoggerFactoryImpl.prototype.isEnabled = function () {
return this._options.enabled;
};
LoggerFactoryImpl.prototype.closeLoggers = function () {
this._loggers.forEachValue(function (logger) {
// We can only close if AbstractLogger is used (our loggers, but user loggers may not extend it, even though unlikely).
if (logger instanceof AbstractLogger_1.AbstractLogger) {
logger.close();
}
});
this._loggers.clear();
};
LoggerFactoryImpl.prototype.getName = function () {
return this._name;
};
LoggerFactoryImpl.prototype.getLogGroupRuntimeSettingsByIndex = function (idx) {
if (idx >= 0 && idx < this._logGroupRuntimeSettingsIndexed.length) {
return this._logGroupRuntimeSettingsIndexed[idx];
}
return null;
};
LoggerFactoryImpl.prototype.getLogGroupRuntimeSettingsByLoggerName = function (nameLogger) {
var result = this._loggerToLogGroupSettings.get(nameLogger);
if (typeof result === "undefined") {
return null;
}
return result;
};
LoggerFactoryImpl.prototype.getLogGroupRuntimeSettings = function () {
return this._logGroupRuntimeSettingsIndexed.slice(0);
};
LoggerFactoryImpl.prototype.loadLogger = function (named) {
var logGroupRules = this._options.logGroupRules;
for (var i = 0; i < logGroupRules.length; i++) {
var logGroupRule = logGroupRules[i];
if (logGroupRule.regExp.test(named)) {
var logGroupRuntimeSettings = this._logGroupRuntimeSettingsIndexed[i];
var logger = void 0;
switch (logGroupRule.loggerType) {
case LoggerOptions_1.LoggerType.Console:
logger = new ConsoleLoggerImpl_1.ConsoleLoggerImpl(named, logGroupRuntimeSettings);
break;
case LoggerOptions_1.LoggerType.MessageBuffer:
logger = new MessageBufferLoggerImpl_1.MessageBufferLoggerImpl(named, logGroupRuntimeSettings);
break;
case LoggerOptions_1.LoggerType.Custom:
if (logGroupRule.callBackLogger != null) {
logger = logGroupRule.callBackLogger(named, logGroupRuntimeSettings);
}
else {
throw new Error("Cannot create a custom logger, custom callback is null");
}
break;
default:
throw new Error("Cannot create a Logger for LoggerType: " + logGroupRule.loggerType);
}
// For a new logger map it by its name
this._loggerToLogGroupSettings.put(named, logGroupRuntimeSettings);
return logger;
}
}
throw new Error("Failed to find a match to create a Logger for: " + named);
};
return LoggerFactoryImpl;
}());
exports.LoggerFactoryImpl = LoggerFactoryImpl;
//# sourceMappingURL=LoggerFactoryImpl.js.map