refactor: log4js.js

remove levels.getLevel function as it have move to the levels.js
This commit is contained in:
e-cloud 2016-07-14 22:09:46 +08:00
parent 8f6d69ba01
commit 87797195f9

View File

@ -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 @@
*
* <h3>Example:</h3>
* <pre>
* 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' );
* </pre>
*
* 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();