@zowe/imperative
Version:
framework for building configurable CLIs
258 lines • 12.6 kB
JavaScript
/*
* This program and the accompanying materials are made available under the terms of the
* Eclipse Public License v2.0 which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-v20.html
*
* SPDX-License-Identifier: EPL-2.0
*
* Copyright Contributors to the Zowe Project.
*
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoggingConfigurer = void 0;
const path = require("path");
const Logger_1 = require("../../logger/src/Logger");
const LoggerConfigBuilder_1 = require("../../logger/src/LoggerConfigBuilder");
const console_1 = require("../../console");
const ImperativeError_1 = require("../../error/src/ImperativeError");
const ImperativeExpect_1 = require("../../expect/src/ImperativeExpect");
/**
* Helper class to construct default config, log4js config, and define
* log4js configuration document.
* @export
* @class LoggingConfigurer
*/
class LoggingConfigurer {
/**
* Configure all log4js loggers based on imperative config
* @static
* @param {string} home - home directory
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @returns {IConfigLogging} - compiled logging config for Logger.init();
* @memberof LoggingConfigurer
*/
static configureLogger(home, imperativeConfig) {
ImperativeExpect_1.ImperativeExpect.toBeDefinedAndNonBlank(home, "home");
ImperativeExpect_1.ImperativeExpect.keysToBeDefinedAndNonBlank(imperativeConfig, ["name"]);
/**
* Build appropriate minimum required configuration for the loggers of:
* - imperative
* - app
* - console
*/
imperativeConfig = LoggingConfigurer.buildLoggingDefaults(imperativeConfig);
/**
* Get a default log4js configuration document
*/
let loggingConfig = LoggerConfigBuilder_1.LoggerConfigBuilder.getDefaultIConfigLogging();
/**
* Add appenders for the log4js configuration document based on the imperative logging configuration
*/
loggingConfig = LoggerConfigBuilder_1.LoggerConfigBuilder.addFileAppender(loggingConfig, LoggerConfigBuilder_1.LoggerConfigBuilder.DEFAULT, LoggerConfigBuilder_1.LoggerConfigBuilder.DEFAULT, home + LoggerConfigBuilder_1.LoggerConfigBuilder.getDefaultFileName(imperativeConfig.logging.imperativeLogging.apiName));
loggingConfig = LoggerConfigBuilder_1.LoggerConfigBuilder.addFileAppender(loggingConfig, imperativeConfig.logging.imperativeLogging.apiName, imperativeConfig.logging.imperativeLogging.apiName, home + LoggerConfigBuilder_1.LoggerConfigBuilder.getDefaultFileName(imperativeConfig.logging.imperativeLogging.apiName));
const appId = imperativeConfig.name;
loggingConfig = LoggerConfigBuilder_1.LoggerConfigBuilder.addFileAppender(loggingConfig, imperativeConfig.logging.appLogging.apiName, imperativeConfig.logging.appLogging.apiName, home + LoggerConfigBuilder_1.LoggerConfigBuilder.getDefaultFileName(appId));
// loggingConfig = LoggerConfigBuilder.addConsoleAppender(loggingConfig, imperativeConfig.logging.consoleLogging.apiName);
/**
* Configure the log4js categories and appenders based on imperative configuration (set log levels)
*/
loggingConfig = LoggingConfigurer.configureImperativeLogger(home, imperativeConfig, loggingConfig, imperativeConfig.logging.imperativeLogging.apiName);
loggingConfig = LoggingConfigurer.configureAppLogger(home, imperativeConfig, loggingConfig, imperativeConfig.logging.appLogging.apiName);
// loggingConfig = LoggingConfigurer.configureConsoleLogger(
// imperativeConfig, loggingConfig, imperativeConfig.logging.consoleLogging.apiName);
/**
* All remaining logs are created here
*/
if (imperativeConfig.logging.additionalLogging != null) {
imperativeConfig.logging.additionalLogging.forEach((logConfig) => {
if (logConfig.apiName == null) {
throw new ImperativeError_1.ImperativeError({
msg: "apiName is required for additionalLoggers",
});
}
loggingConfig = LoggerConfigBuilder_1.LoggerConfigBuilder.addFileAppender(loggingConfig, logConfig.apiName);
loggingConfig = LoggingConfigurer.configureLoggerByKeyHelper(home, logConfig, loggingConfig, logConfig.apiName);
});
}
return loggingConfig;
}
/**
* Configures log4js imperative appender from imperative config
* @private
* @static
* @param {string} home - home directory
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @param {IConfigLogging} loggingConfig - log4js config
* @param {string} key - keys within log4js appenders (like the appenders "imperative" key or categories "imperative" key)
* @memberof LoggingConfigurer
*/
static configureImperativeLogger(home, imperativeConfig, loggingConfig, key) {
return LoggingConfigurer.configureLoggerByKey(home, imperativeConfig, loggingConfig, key, "imperativeLogging");
}
/**
* Configures log4js app appender from imperative config
* @private
* @static
* @param {string} home - home directory
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @param {IConfigLogging} loggingConfig - log4js config
* @param {string} key - keys within log4js appenders (like the appenders "imperative" key or categories "imperative" key)
* @memberof LoggingConfigurer
*/
static configureAppLogger(home, imperativeConfig, loggingConfig, key) {
return LoggingConfigurer.configureLoggerByKey(home, imperativeConfig, loggingConfig, key, "appLogging");
}
/**
* Configures log4js console appender from imperative config
* @private
* @static
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @param {IConfigLogging} loggingConfig - log4js config
* @param {string} key - keys within log4js appenders (like the appenders "imperative" key or categories "imperative" key)
* @memberof LoggingConfigurer
*/
// private static configureConsoleLogger(imperativeConfig: IImperativeConfig, loggingConfig: IConfigLogging, key: string): IConfigLogging {
// return LoggingConfigurer.configureLoggerByKey(imperativeConfig, loggingConfig, key, "consoleLogging");
// }
/**
* Configures log4js appenders from imperative config
* @private
* @static
* @param {string} home - home directory
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @param {IConfigLogging} loggingConfig - log4js config
* @param {string} entryKey - keys within log4js appenders (like the appenders "imperative" key or categories "imperative" key)
* @param {string} configKey - keys within IImperativeLogsConfig (like imperativeLogging)
* @memberof LoggingConfigurer
*/
static configureLoggerByKey(home, imperativeConfig, loggingConfig, entryKey, configKey) {
if (imperativeConfig.logging != null && imperativeConfig.logging[configKey] != null) {
loggingConfig = LoggingConfigurer.configureLoggerByKeyHelper(home, imperativeConfig.logging[configKey], loggingConfig, entryKey);
}
return loggingConfig;
}
/**
* Common method to configure log4js appenders via imperative config
* @private
* @static
* @param {string} home - home directory
* @param {IImperativeLoggingConfig} impLogConfig
* @param {IConfigLogging} loggingConfig - imperative main config
* @param {string} entryKey - imperative key
* @param {string} configKey -log4js key
* @returns {IImperativeConfig} - populated config
* @memberof LoggingConfigurer
*/
static configureLoggerByKeyHelper(home, impLogConfig, loggingConfig, entryKey) {
if (impLogConfig.logFile != null) {
const fullLogFilePath = home +
LoggingConfigurer.normalizeDir(impLogConfig.logFile);
loggingConfig.log4jsConfig.appenders[entryKey].filename = fullLogFilePath;
}
if (impLogConfig.level != null) {
console_1.Console.validateLevel(impLogConfig.level);
loggingConfig.log4jsConfig.categories[entryKey].level = impLogConfig.level;
}
return loggingConfig;
}
/**
* Build minimum imperative config for default supplied loggers
* @private
* @static
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @returns {IImperativeConfig} - populated config
* @memberof LoggingConfigurer
*/
static buildLoggingDefaults(imperativeConfig) {
const imperativeId = Logger_1.Logger.DEFAULT_IMPERATIVE_NAME;
imperativeConfig = LoggingConfigurer.buildImperativeLoggingDefaults(imperativeConfig, imperativeId);
const appId = Logger_1.Logger.DEFAULT_APP_NAME;
imperativeConfig = LoggingConfigurer.buildAppLoggingDefaults(imperativeConfig, appId);
// const consoleId = Logger.DEFAULT_CONSOLE_NAME;
// imperativeConfig = LoggingConfigurer.buildConsoleLoggingDefaults(imperativeConfig, consoleId);
return imperativeConfig;
}
/**
* Build minimum imperative config for default imperative logger
* @private
* @static
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @param {string} name - log4js name
* @returns {IImperativeConfig} - populated config
* @memberof LoggingConfigurer
*/
static buildImperativeLoggingDefaults(imperativeConfig, name) {
return LoggingConfigurer.buildLoggingDefaultsByKey(imperativeConfig, "imperativeLogging", name);
}
/**
* Build minimum app config for default app logger
* @private
* @static
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @param {string} name - log4js name
* @returns {IImperativeConfig} - populated config
* @memberof LoggingConfigurer
*/
static buildAppLoggingDefaults(imperativeConfig, name) {
return LoggingConfigurer.buildLoggingDefaultsByKey(imperativeConfig, "appLogging", name);
}
/**
* Build minimum console config for default console logger
* @private
* @static
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @param {string} name - imperative main config
* @memberof LoggingConfigurer
*/
// private static buildConsoleLoggingDefaults(imperativeConfig: IImperativeConfig, name: string) {
// return LoggingConfigurer.buildLoggingDefaultsByKey(imperativeConfig, "consoleLogging", name);
// }
/**
* This method overrides any configuration of reserved loggers.
* Build minimum console config for default console logger
* @private
* @static
* @param {IImperativeConfig} imperativeConfig - imperative main config
* @param {string} key - imperative main config
* @param {string} apiName - imperative main config
* @param {string} [category=apiName] - imperative main config
* @returns {IImperativeConfig} - populated config
* @memberof LoggingConfigurer
*/
static buildLoggingDefaultsByKey(imperativeConfig, key, apiName, category = apiName) {
if (imperativeConfig.logging == null) {
imperativeConfig.logging = {};
imperativeConfig.logging[key] = { apiName, category };
}
else {
if (imperativeConfig.logging[key] == null) {
imperativeConfig.logging[key] = { apiName, category };
}
else {
imperativeConfig.logging[key].apiName = apiName;
imperativeConfig.logging[key].category = category;
}
}
return imperativeConfig;
}
/**
* Normalize input file path for logs in the case that a user provides
* redundant or missing file delimiters.
* @private
* @static
* @param {string} file - normalized file
* @returns {string} - normalized dir
* @memberof LoggingConfigurer
*/
static normalizeDir(file) {
if (file[0] === "/" || file[0] === "\\") {
return file;
}
else {
return path.posix.sep + file;
}
}
}
exports.LoggingConfigurer = LoggingConfigurer;
//# sourceMappingURL=LoggingConfigurer.js.map
;