diff --git a/lib/log4js.js b/lib/log4js.js index 7eca310..dfe2395 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -1,4 +1,5 @@ -"use strict"; +/* eslint no-prototype-builtins:1,no-restricted-syntax:[1, "ForInStatement"] */ +'use strict'; /* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,19 +20,19 @@ * *
- * var logging = require('log4js');
+ * let logging = require('log4js');
* //add an appender that logs all messages to stdout.
* logging.addAppender(logging.consoleAppender());
- * //add an appender that logs "some-category" to a file
- * logging.addAppender(logging.fileAppender("file.log"), "some-category");
+ * //add an appender that logs 'some-category' to a file
+ * logging.addAppender(logging.fileAppender('file.log'), 'some-category');
* //get a logger
- * var log = logging.getLogger("some-category");
+ * let log = logging.getLogger('some-category');
* log.setLevel(logging.levels.TRACE); //set the Level
*
* ...
*
* //call the log
- * log.trace("trace me" );
+ * log.trace('trace me' );
*
*
* NOTE: the authors below are the original browser-based log4js authors
@@ -43,23 +44,20 @@
* @static
* Website: http://log4js.berlios.de
*/
-var events = require('events')
- , fs = require('fs')
- , path = require('path')
- , util = require('util')
- , layouts = require('./layouts')
- , levels = require('./levels')
- , loggerModule = require('./logger')
- , LoggingEvent = loggerModule.LoggingEvent
- , Logger = loggerModule.Logger
- , ALL_CATEGORIES = '[all]'
- , appenders = {}
- , loggers = {}
- , appenderMakers = {}
- , appenderShutdowns = {}
- , defaultConfig = {
+const fs = require('fs');
+const util = require('util');
+const layouts = require('./layouts');
+const levels = require('./levels');
+const loggerModule = require('./logger');
+const Logger = loggerModule.Logger;
+const ALL_CATEGORIES = '[all]';
+let appenders = {};
+const loggers = {};
+const appenderMakers = {};
+const appenderShutdowns = {};
+const defaultConfig = {
appenders: [
- { type: "console" }
+ { type: 'console' }
],
replaceConsole: false
};
@@ -71,32 +69,23 @@ function hasLogger(logger) {
}
levels.forName = function (levelStr, levelVal) {
- var level;
- if (typeof levelStr === "string" && typeof levelVal === "number") {
- var levelUpper = levelStr.toUpperCase();
+ let level;
+ if (typeof levelStr === 'string' && typeof levelVal === 'number') {
+ const levelUpper = levelStr.toUpperCase();
level = new levels.Level(levelVal, levelUpper);
loggerModule.addLevelMethods(level);
}
return level;
};
-levels.getLevel = function (levelStr) {
- var level;
- if (typeof levelStr === "string") {
- var levelUpper = levelStr.toUpperCase();
- level = levels.toLevel(levelStr);
- }
- return level;
-};
-
function getBufferedLogger(categoryName) {
- var base_logger = getLogger(categoryName);
- var logger = {};
+ const baseLogger = getLogger(categoryName);
+ const logger = {};
logger.temp = [];
- logger.target = base_logger;
+ logger.target = baseLogger;
logger.flush = function () {
- for (var i = 0; i < logger.temp.length; i++) {
- var log = logger.temp[i];
+ for (let i = 0; i < logger.temp.length; i++) {
+ const log = logger.temp[i];
logger.target[log.level](log.message);
delete logger.temp[i];
}
@@ -112,49 +101,45 @@ function getBufferedLogger(categoryName) {
}
function normalizeCategory(category) {
- return category + '.';
+ return `${category}.`;
}
function doesLevelEntryContainsLogger(levelCategory, loggerCategory) {
- var normalizedLevelCategory = normalizeCategory(levelCategory);
- var normalizedLoggerCategory = normalizeCategory(loggerCategory);
- return normalizedLoggerCategory.substring(0, normalizedLevelCategory.length) == normalizedLevelCategory; //jshint
- // ignore:line
+ const normalizedLevelCategory = normalizeCategory(levelCategory);
+ const normalizedLoggerCategory = normalizeCategory(loggerCategory);
+ return normalizedLoggerCategory.substring(0, normalizedLevelCategory.length) === normalizedLevelCategory;
}
function doesAppenderContainsLogger(appenderCategory, loggerCategory) {
- var normalizedAppenderCategory = normalizeCategory(appenderCategory);
- var normalizedLoggerCategory = normalizeCategory(loggerCategory);
- return normalizedLoggerCategory.substring(0, normalizedAppenderCategory.length) == normalizedAppenderCategory; //jshint
- // ignore:line
+ const normalizedAppenderCategory = normalizeCategory(appenderCategory);
+ const normalizedLoggerCategory = normalizeCategory(loggerCategory);
+ return normalizedLoggerCategory.substring(0, normalizedAppenderCategory.length) === normalizedAppenderCategory;
}
/**
* Get a logger instance. Instance is cached on categoryName level.
- * @param {String} categoryName name of category to log to.
- * @return {Logger} instance of logger for the category
* @static
+ * @param loggerCategoryName
+ * @return {Logger} instance of logger for the category
*/
function getLogger(loggerCategoryName) {
-
// Use default logger if categoryName is not specified or invalid
- if (typeof loggerCategoryName !== "string") {
+ if (typeof loggerCategoryName !== 'string') {
loggerCategoryName = Logger.DEFAULT_CATEGORY;
}
if (!hasLogger(loggerCategoryName)) {
-
- var level;
+ let level;
/* jshint -W073 */
- // If there's a "levels" entry in the configuration
+ // If there's a 'levels' entry in the configuration
if (levels.config) {
// Goes through the categories in the levels configuration entry,
- // starting with the "higher" ones.
- var keys = Object.keys(levels.config).sort();
- for (var idx = 0; idx < keys.length; idx++) {
- var levelCategory = keys[idx];
+ // starting with the 'higher' ones.
+ const keys = Object.keys(levels.config).sort();
+ for (let idx = 0; idx < keys.length; idx++) {
+ const levelCategory = keys[idx];
if (doesLevelEntryContainsLogger(levelCategory, loggerCategoryName)) {
// level for the logger
level = levels.config[levelCategory];
@@ -167,22 +152,18 @@ function getLogger(loggerCategoryName) {
loggers[loggerCategoryName] = new Logger(loggerCategoryName, level);
/* jshint -W083 */
- var appenderList;
- for (var appenderCategory in appenders) {
+ let appenderList;
+ for (const appenderCategory in appenders) {
if (doesAppenderContainsLogger(appenderCategory, loggerCategoryName)) {
appenderList = appenders[appenderCategory];
- appenderList.forEach(function (appender) {
- loggers[loggerCategoryName].addListener("log", appender);
- });
+ appenderList.forEach(appender => { loggers[loggerCategoryName].addListener('log', appender); });
}
}
/* jshint +W083 */
if (appenders[ALL_CATEGORIES]) {
appenderList = appenders[ALL_CATEGORIES];
- appenderList.forEach(function (appender) {
- loggers[loggerCategoryName].addListener("log", appender);
- });
+ appenderList.forEach(appender => { loggers[loggerCategoryName].addListener('log', appender); });
}
}
@@ -192,38 +173,35 @@ function getLogger(loggerCategoryName) {
/**
* args are appender, then zero or more categories
*/
-function addAppender() {
- var args = Array.prototype.slice.call(arguments);
- var appender = args.shift();
+function addAppender(...args) {
+ const appender = args.shift();
if (args.length === 0 || args[0] === undefined) {
args = [ALL_CATEGORIES];
}
- //argument may already be an array
+ // argument may already be an array
if (Array.isArray(args[0])) {
args = args[0];
}
- args.forEach(function (appenderCategory) {
+ args.forEach(appenderCategory => {
addAppenderToCategory(appender, appenderCategory);
if (appenderCategory === ALL_CATEGORIES) {
addAppenderToAllLoggers(appender);
} else {
-
- for (var loggerCategory in loggers) {
+ for (const loggerCategory in loggers) {
if (doesAppenderContainsLogger(appenderCategory, loggerCategory)) {
- loggers[loggerCategory].addListener("log", appender);
+ loggers[loggerCategory].addListener('log', appender);
}
}
-
}
});
}
function addAppenderToAllLoggers(appender) {
- for (var logger in loggers) {
+ for (const logger in loggers) {
if (hasLogger(logger)) {
- loggers[logger].addListener("log", appender);
+ loggers[logger].addListener('log', appender);
}
}
}
@@ -237,9 +215,9 @@ function addAppenderToCategory(appender, category) {
function clearAppenders() {
appenders = {};
- for (var logger in loggers) {
+ for (const logger in loggers) {
if (hasLogger(logger)) {
- loggers[logger].removeAllListeners("log");
+ loggers[logger].removeAllListeners('log');
}
}
}
@@ -247,15 +225,15 @@ function clearAppenders() {
function configureAppenders(appenderList, options) {
clearAppenders();
if (appenderList) {
- appenderList.forEach(function (appenderConfig) {
+ appenderList.forEach(appenderConfig => {
loadAppender(appenderConfig.type);
- var appender;
+ let appender;
appenderConfig.makers = appenderMakers;
try {
appender = appenderMakers[appenderConfig.type](appenderConfig, options);
addAppender(appender, appenderConfig.category);
} catch (e) {
- throw new Error("log4js configuration problem for " + util.inspect(appenderConfig), e);
+ throw new Error(`log4js configuration problem for ${util.inspect(appenderConfig)}`, e);
}
});
}
@@ -264,19 +242,20 @@ function configureAppenders(appenderList, options) {
function configureLevels(_levels) {
levels.config = _levels; // Keep it so we can create loggers later using this cfg
if (_levels) {
- var keys = Object.keys(levels.config).sort();
- for (var idx in keys) {
- var category = keys[idx];
+ const keys = Object.keys(levels.config).sort();
+
+ /* eslint-disable guard-for-in */
+ for (const idx in keys) {
+ const category = keys[idx];
if (category === ALL_CATEGORIES) {
setGlobalLogLevel(_levels[category]);
}
- /* jshint -W073 */
- for (var loggerCategory in loggers) {
+
+ for (const loggerCategory in loggers) {
if (doesLevelEntryContainsLogger(category, loggerCategory)) {
loggers[loggerCategory].setLevel(_levels[category]);
}
}
- /* jshint +W073 */
}
}
}
@@ -294,11 +273,11 @@ function getDefaultLogger() {
return getLogger(Logger.DEFAULT_CATEGORY);
}
-var configState = {};
+const configState = {};
function loadConfigurationFile(filename) {
if (filename) {
- return JSON.parse(fs.readFileSync(filename, "utf8"));
+ return JSON.parse(fs.readFileSync(filename, 'utf8'));
}
return undefined;
}
@@ -316,15 +295,14 @@ function configureOnceOff(config, options) {
}
} catch (e) {
throw new Error(
- "Problem reading log4js config " + util.inspect(config) +
- ". Error was \"" + e.message + "\" (" + e.stack + ")"
+ `Problem reading log4js config ${util.inspect(config)}. Error was '${e.message}' (${e.stack})`
);
}
}
}
function reloadConfiguration(options) {
- var mtime = getMTime(configState.filename);
+ const mtime = getMTime(configState.filename);
if (!mtime) return;
if (configState.lastMTime && (mtime.getTime() > configState.lastMTime.getTime())) {
@@ -334,11 +312,11 @@ function reloadConfiguration(options) {
}
function getMTime(filename) {
- var mtime;
+ let mtime;
try {
mtime = fs.statSync(configState.filename).mtime;
} catch (e) {
- getLogger('log4js').warn('Failed to load configuration file ' + filename);
+ getLogger('log4js').warn(`Failed to load configuration file ${filename}`);
}
return mtime;
}
@@ -354,7 +332,7 @@ function initReloadConfiguration(filename, options) {
}
function configure(configurationFileOrObject, options) {
- var config = configurationFileOrObject;
+ let config = configurationFileOrObject;
config = config || process.env.LOG4JS_CONFIG;
options = options || {};
@@ -373,7 +351,7 @@ function configure(configurationFileOrObject, options) {
configureOnceOff(config, options);
}
-var originalConsoleFunctions = {
+const originalConsoleFunctions = {
log: console.log,
debug: console.debug,
info: console.info,
@@ -383,26 +361,26 @@ var originalConsoleFunctions = {
function replaceConsole(logger) {
function replaceWith(fn) {
- return function () {
- fn.apply(logger, arguments);
+ return function (...args) {
+ fn.apply(logger, args);
};
}
- logger = logger || getLogger("console");
- ['log', 'debug', 'info', 'warn', 'error'].forEach(function (item) {
+ logger = logger || getLogger('console');
+
+ ['log', 'debug', 'info', 'warn', 'error'].forEach(item => {
console[item] = replaceWith(item === 'log' ? logger.info : logger[item]);
});
}
function restoreConsole() {
- ['log', 'debug', 'info', 'warn', 'error'].forEach(function (item) {
- console[item] = originalConsoleFunctions[item];
- });
+ ['log', 'debug', 'info', 'warn', 'error'].forEach(item => { console[item] = originalConsoleFunctions[item]; });
}
+/* eslint global-require:0 */
/**
* Load an appenderModule based on the provided appender filepath. Will first
- * check if the appender path is a subpath of the log4js "lib/appenders" directory.
+ * check if the appender path is a subpath of the log4js 'lib/appenders' directory.
* If not, it will attempt to load the the appender as complete path.
*
* @param {string} appender The filepath for the appender.
@@ -410,9 +388,9 @@ function restoreConsole() {
* @private
*/
function requireAppender(appender) {
- var appenderModule;
+ let appenderModule;
try {
- appenderModule = require('./appenders/' + appender);
+ appenderModule = require(`./appenders/${appender}`);
} catch (e) {
appenderModule = require(appender);
}
@@ -433,7 +411,7 @@ function loadAppender(appender, appenderModule) {
appenderModule = appenderModule || requireAppender(appender);
if (!appenderModule) {
- throw new Error("Invalid log4js appender: " + util.inspect(appender));
+ throw new Error(`Invalid log4js appender: ${util.inspect(appender)}`);
}
module.exports.appenders[appender] = appenderModule.appender.bind(appenderModule);
@@ -450,7 +428,6 @@ function loadAppender(appender, appenderModule) {
* @params {Function} cb - The callback to be invoked once all appenders have
* shutdown. If an error occurs, the callback will be given the error object
* as the first argument.
- * @returns {void}
*/
function shutdown(cb) {
// First, disable all writing to appenders. This prevents appenders from
@@ -458,27 +435,37 @@ function shutdown(cb) {
loggerModule.disableAllLogWrites();
// Call each of the shutdown functions in parallel
- var completed = 0;
- var error;
- var shutdownFcts = [];
- var complete = function (err) {
+ let completed = 0;
+ let error;
+ const shutdownFunctions = [];
+
+ function complete(err) {
error = error || err;
completed++;
- if (completed >= shutdownFcts.length) {
+ if (completed >= shutdownFunctions.length) {
cb(error);
}
- };
- for (var category in appenderShutdowns) {
+ }
+
+ for (const category in appenderShutdowns) {
if (appenderShutdowns.hasOwnProperty(category)) {
- shutdownFcts.push(appenderShutdowns[category]);
+ shutdownFunctions.push(appenderShutdowns[category]);
}
}
- if (!shutdownFcts.length) {
+
+ if (!shutdownFunctions.length) {
return cb();
}
- shutdownFcts.forEach(function (shutdownFct) { shutdownFct(complete); });
+
+ shutdownFunctions.forEach(shutdownFct => { shutdownFct(complete); });
+
+ return null;
}
+/**
+ *
+ * @name Log4js
+ */
module.exports = {
getBufferedLogger: getBufferedLogger,
getLogger: getLogger,
@@ -503,5 +490,5 @@ module.exports = {
connectLogger: require('./connect-logger').connectLogger
};
-//set ourselves up
+// set ourselves up
configure();