log4js2
Version:
[](https://travis-ci.org/anigenero/log4js2) [](https://codecov.io/gh/anigenero/log4js2)
176 lines • 5.36 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const appender_1 = require("./appender");
const console_appender_1 = require("./appender/console.appender");
const log_level_1 = require("./const/log.level");
const logger_1 = require("./logger");
const logger_2 = require("./logger/logger");
const utility_1 = require("./util/utility");
const virtual_console_1 = require("./util/virtual.console");
/**
* The default appenders that should be included if no appenders are specified
* @const
*/
const _DEFAULT_APPENDERS = (() => {
return [{
appender: console_appender_1.ConsoleAppender,
level: log_level_1.LogLevel.ERROR
}];
})();
const _DEFAULT_PATTERN_LAYOUT = '%d [%p] %c - %m';
/**
* The default configuration for log4js2. If no configuration is specified, then this
* configuration will be injected
* @const
*/
const _DEFAULT_CONFIG = (() => ({
appenders: _DEFAULT_APPENDERS,
loggers: [{
level: log_level_1.LogLevel.ERROR
}],
patternLayout: '%d [%p] %c - %m'
}))();
/** @type {?IConfiguration} */
let _configuration = null;
/**
* Gets the appenders for the level and layout
*
* @private
* @function
*
* @param {ILoggerConfiguration} logConfig
*
* @returns {Array}
*/
const _getAppendersForLogger = (logConfig) => {
const appenderList = [];
appender_1.getAppenders().forEach((value) => {
const logger = new value();
logger.setLogLevel(logConfig.level);
logger.setLayout(logConfig.patternLayout);
appenderList.push(logger);
});
return appenderList;
};
/**
* Configures the loggers
*
* @private
* @function
*
* @param {IConfiguration} config
*/
const _configureLoggers = (config) => {
let hasMain = false;
if (utility_1.isArray(config.loggers)) {
config.loggers.forEach((logger) => {
logger.tag = logger.tag || logger_1.MAIN_LOGGER;
hasMain = hasMain || logger.tag === logger_1.MAIN_LOGGER;
if (!logger.patternLayout || typeof logger.patternLayout !== 'string') {
logger.patternLayout = config.patternLayout;
}
logger.patternLayout = logger.patternLayout || _DEFAULT_PATTERN_LAYOUT;
logger.level = logger.level || config.level || log_level_1.LogLevel.ERROR;
logger_1.addLogger(logger.tag, new logger_2.Logger(logger.tag, _getAppendersForLogger(logger)));
});
}
else {
config.loggers = [];
}
if (!hasMain) {
const mainLoggerConfig = {
tag: logger_1.MAIN_LOGGER,
level: config.level || log_level_1.LogLevel.ERROR,
patternLayout: config.patternLayout || _DEFAULT_PATTERN_LAYOUT,
};
config.loggers.push(mainLoggerConfig);
logger_1.addLogger(logger_1.MAIN_LOGGER, new logger_2.Logger(logger_1.MAIN_LOGGER, _getAppendersForLogger(mainLoggerConfig)));
}
};
/**
* Configures appenders
*
* @private
* @function
*
* @param {Array.<LogAppender|function>} appenders
*/
const _configureAppenders = (appenders) => {
if (!utility_1.isArray(appenders)) {
appenders = _DEFAULT_APPENDERS;
}
appenders.forEach((value) => {
if (typeof value === 'string') {
if (appender_1.getAppender(value)) {
// TODO
}
}
else if (value.appender) {
if (typeof value.appender === 'string') {
if (appender_1.getAppender(value.appender)) {
// TODO
}
}
else {
appender_1.addAppender(value.appender);
}
}
else if (value.prototype.append) {
appender_1.addAppender(value);
}
else {
// TODO: throw an error
}
});
};
/**
* Configures the logger
*
* @function
* @params {IConfiguration} config
*/
function configure(config) {
// set the default layout
if (!config.patternLayout) {
config.patternLayout = _DEFAULT_PATTERN_LAYOUT;
}
// configure the appenders
_configureAppenders(config.appenders);
// configure the loggers
_configureLoggers(config);
virtual_console_1.getVirtualConsole(logger_1.getLogger(logger_1.MAIN_LOGGER, config));
_configuration = config;
}
exports.configure = configure;
exports.getLogger = (context) => {
if (!_configuration) {
configure(_DEFAULT_CONFIG);
}
const logContext = determineContext(context);
const loggerConfig = _getLoggerConfiguration(logContext) || _getLoggerConfiguration(logger_1.MAIN_LOGGER);
return logger_1.getLogger(logContext, loggerConfig);
};
function _getLoggerConfiguration(context) {
return _configuration.loggers.filter((value) => value.tag === context)[0];
}
function determineContext(context) {
// determine the context
if (typeof context === 'string') {
return context;
}
if (typeof context === 'function') {
return utility_1.getFunctionName(context);
}
else if (typeof context === 'object') {
context = utility_1.getFunctionName(context.constructor);
if (context === 'Object') {
return 'anonymous';
}
else {
return context;
}
}
else {
return logger_1.MAIN_LOGGER;
}
}
//# sourceMappingURL=log4js.js.map