moved cluster support into core, removed clustered appender, multiprocess appender
This commit is contained in:
169
lib/log4js.js
169
lib/log4js.js
@@ -48,6 +48,7 @@
|
||||
*/
|
||||
var debug = require('./debug')('core')
|
||||
, fs = require('fs')
|
||||
, cluster = require('cluster')
|
||||
, util = require('util')
|
||||
, layouts = require('./layouts')
|
||||
, levels = require('./levels')
|
||||
@@ -64,16 +65,57 @@ var debug = require('./debug')('core')
|
||||
}
|
||||
};
|
||||
|
||||
function serialise(event) {
|
||||
return JSON.stringify(event);
|
||||
}
|
||||
|
||||
function deserialise(serialised) {
|
||||
var event;
|
||||
try {
|
||||
event = JSON.parse(serialised);
|
||||
event.startTime = new Date(event.startTime);
|
||||
event.level = levels.toLevel(event.level.levelStr);
|
||||
} catch(e) {
|
||||
event = {
|
||||
startTime: new Date(),
|
||||
category: 'log4js',
|
||||
level: levels.ERROR,
|
||||
data: [ 'Unable to parse log:', serialised ]
|
||||
};
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
//in a multi-process node environment, worker loggers will use
|
||||
//process.send
|
||||
cluster.on('fork', function(worker) {
|
||||
debug('listening to worker: ' + worker);
|
||||
worker.on('message', function(message) {
|
||||
if (message.type && message.type === '::log4js-message') {
|
||||
debug("received message: " + message.event);
|
||||
dispatch(deserialise(message.event));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Get a logger instance.
|
||||
* @param {String} categoryName name of category to log to.
|
||||
* @param {String} category to log to.
|
||||
* @return {Logger} instance of logger for the category
|
||||
* @static
|
||||
*/
|
||||
function getLogger (categoryName) {
|
||||
debug("getLogger(" + categoryName + ")");
|
||||
function getLogger (category) {
|
||||
debug("getLogger(" + category + ")");
|
||||
|
||||
return new Logger(dispatch, categoryName || 'default');
|
||||
return new Logger(
|
||||
cluster.isMaster ? dispatch : workerDispatch,
|
||||
category || 'default'
|
||||
);
|
||||
}
|
||||
|
||||
function workerDispatch(event) {
|
||||
process.send({ type: "::log4js-message", event: serialise(event) });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -92,67 +134,6 @@ function dispatch(event) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
var configState = {};
|
||||
|
||||
function loadConfigurationFile(filename) {
|
||||
if (filename) {
|
||||
return JSON.parse(fs.readFileSync(filename, "utf8"));
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function configureOnceOff(config, options) {
|
||||
if (config) {
|
||||
try {
|
||||
configureAppenders(config.appenders, options);
|
||||
configureLevels(config.levels);
|
||||
|
||||
if (config.replaceConsole) {
|
||||
replaceConsole();
|
||||
} else {
|
||||
restoreConsole();
|
||||
}
|
||||
} catch (e) {
|
||||
throw new Error(
|
||||
"Problem reading log4js config " + util.inspect(config) +
|
||||
". Error was \"" + e.message + "\" (" + e.stack + ")"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function reloadConfiguration() {
|
||||
var mtime = getMTime(configState.filename);
|
||||
if (!mtime) return;
|
||||
|
||||
if (configState.lastMTime && (mtime.getTime() > configState.lastMTime.getTime())) {
|
||||
configureOnceOff(loadConfigurationFile(configState.filename));
|
||||
}
|
||||
configState.lastMTime = mtime;
|
||||
}
|
||||
|
||||
function getMTime(filename) {
|
||||
var mtime;
|
||||
try {
|
||||
mtime = fs.statSync(configState.filename).mtime;
|
||||
} catch (e) {
|
||||
getLogger('log4js').warn('Failed to load configuration file ' + filename);
|
||||
}
|
||||
return mtime;
|
||||
}
|
||||
|
||||
function initReloadConfiguration(filename, options) {
|
||||
if (configState.timerId) {
|
||||
clearInterval(configState.timerId);
|
||||
delete configState.timerId;
|
||||
}
|
||||
configState.filename = filename;
|
||||
configState.lastMTime = getMTime(filename);
|
||||
configState.timerId = setInterval(reloadConfiguration, options.reloadSecs*1000);
|
||||
}
|
||||
*/
|
||||
|
||||
function load(file) {
|
||||
return JSON.parse(fs.readFileSync(file, "utf-8"));
|
||||
}
|
||||
@@ -178,25 +159,6 @@ function configure(configurationFileOrObject) {
|
||||
validateCategories(config.categories);
|
||||
categories = config.categories;
|
||||
|
||||
/*
|
||||
var config = configurationFileOrObject;
|
||||
config = config || process.env.LOG4JS_CONFIG;
|
||||
options = options || {};
|
||||
|
||||
if (config === undefined || config === null || typeof(config) === 'string') {
|
||||
if (options.reloadSecs) {
|
||||
initReloadConfiguration(config, options);
|
||||
}
|
||||
config = loadConfigurationFile(config) || defaultConfig;
|
||||
} else {
|
||||
if (options.reloadSecs) {
|
||||
getLogger('log4js').warn(
|
||||
'Ignoring configuration reload parameter for "object" configuration.'
|
||||
);
|
||||
}
|
||||
}
|
||||
configureOnceOff(config, options);
|
||||
*/
|
||||
}
|
||||
|
||||
function validateCategories(cats) {
|
||||
@@ -259,48 +221,9 @@ function loadAppender(appender) {
|
||||
appenderMakers[appender] = appenderModule.configure.bind(appenderModule);
|
||||
}
|
||||
|
||||
/*
|
||||
var originalConsoleFunctions = {
|
||||
log: console.log,
|
||||
debug: console.debug,
|
||||
info: console.info,
|
||||
warn: console.warn,
|
||||
error: console.error
|
||||
};
|
||||
|
||||
function replaceConsole(logger) {
|
||||
function replaceWith(fn) {
|
||||
return function() {
|
||||
fn.apply(logger, arguments);
|
||||
};
|
||||
}
|
||||
logger = logger || getLogger("console");
|
||||
['log','debug','info','warn','error'].forEach(function (item) {
|
||||
console[item] = replaceWith(item === 'log' ? logger.info : logger[item]);
|
||||
});
|
||||
}
|
||||
|
||||
function restoreConsole() {
|
||||
['log', 'debug', 'info', 'warn', 'error'].forEach(function (item) {
|
||||
console[item] = originalConsoleFunctions[item];
|
||||
});
|
||||
}
|
||||
|
||||
*/
|
||||
module.exports = {
|
||||
getLogger: getLogger,
|
||||
configure: configure,
|
||||
/*
|
||||
replaceConsole: replaceConsole,
|
||||
restoreConsole: restoreConsole,
|
||||
|
||||
levels: levels,
|
||||
|
||||
layouts: layouts,
|
||||
appenders: {},
|
||||
appenderMakers: appenderMakers,
|
||||
connectLogger: require('./connect-logger').connectLogger
|
||||
*/
|
||||
};
|
||||
|
||||
//set ourselves up
|
||||
|
||||
Reference in New Issue
Block a user