This commit is contained in:
Gareth Jones
2011-10-31 08:42:58 +11:00
7 changed files with 271 additions and 50 deletions

56
lib/appenders/hookio.js Normal file
View File

@@ -0,0 +1,56 @@
var log4js = require('../log4js');
var layouts = require('../layouts');
var Hook = require('hook.io').Hook;
var util = require('util');
var Logger = function createLogger(options) {
var self = this;
var actualAppender = options.actualAppender;
Hook.call(self, options);
self.on('hook::ready', function hookReady() {
self.on('*::' + options.name + '::log', function log(loggingEvent) {
deserializeLoggingEvent(loggingEvent);
actualAppender(loggingEvent);
});
});
}
util.inherits(Logger, Hook);
function deserializeLoggingEvent(loggingEvent) {
loggingEvent.startTime = new Date(loggingEvent.startTime);
loggingEvent.level.toString = function levelToString() {
return loggingEvent.level.levelStr;
};
}
function createAppender(hookioOptions, actualAppender) {
var loggerHook;
if (hookioOptions.mode === 'master') {
// Start the master hook, handling the actual logging
loggerHook = new Logger({ name: hookioOptions.name, debug: hookioOptions.debug, actualAppender: actualAppender });
} else {
// Start a worker, just emitting events for a master
loggerHook = new Hook({ name: hookioOptions.name, debug: hookioOptions.debug });
}
loggerHook.start();
var loggerEvent = hookioOptions.name + '::log';
return function log(loggingEvent) {
loggerHook.emit(loggerEvent, loggingEvent);
};
}
function configure(config) {
var actualAppender;
if (config.appender && config.mode === 'master') {
log4js.loadAppender(config.appender.type);
actualAppender = log4js.appenderMakers[config.appender.type](config.appender);
}
delete config.appender;
delete config.type;
return createAppender(config, actualAppender);
}
exports.name = 'hookio';
exports.appender = createAppender;
exports.configure = configure;

View File

@@ -1,4 +1,5 @@
var levels = require('../levels');
var log4js = require('../log4js');
function logLevelFilter (levelString, appender) {
var level = levels.toLevel(levelString);
@@ -10,10 +11,11 @@ function logLevelFilter (levelString, appender) {
}
function configure(config) {
var appender = config.makers[config.appender.type](config.appender);
log4js.loadAppender(config.appender.type);
var appender = log4js.appenderMakers[config.appender.type](config.appender);
return logLevelFilter(config.level, appender);
}
exports.name = "logLevelFilter";
exports.appender = logLevelFilter;
exports.configure = configure;
exports.configure = configure;

View File

@@ -136,6 +136,7 @@ function configureAppenders(appenderList) {
clearAppenders();
if (appenderList) {
appenderList.forEach(function(appenderConfig) {
loadAppender(appenderConfig.type);
var appender;
appenderConfig.makers = appenderMakers;
appender = appenderMakers[appenderConfig.type](appenderConfig);
@@ -248,13 +249,13 @@ function getDefaultLogger () {
return getLogger(DEFAULT_CATEGORY);
}
function findConfiguration() {
function findConfiguration(filename) {
var path;
try {
path = require.resolve('log4js.json');
path = require.resolve(filename || 'log4js.json');
} catch (e) {
//file not found. default to the one in the log4js module.
path = __dirname + '/log4js.json';
path = filename || __dirname + '/log4js.json';
}
return path;
@@ -263,8 +264,8 @@ function findConfiguration() {
var configState = {};
function loadConfigurationFile(filename) {
filename = filename || findConfiguration();
if (filename && (!configState.lastFilename || filename !== configState.lastFilename ||
filename = findConfiguration(filename);
if (filename && (!configState.lastFilename || filename !== configState.lastFilename ||
!configState.lastMTime || fs.statSync(filename).mtime !== configState.lastMTime)) {
configState.lastFilename = filename;
configState.lastMTime = fs.statSync(filename).mtime;
@@ -285,7 +286,7 @@ function configureOnceOff(config) {
}
function reloadConfiguration() {
var filename = configState.filename || findConfiguration(),
var filename = findConfiguration(configState.filename),
mtime;
if (!filename) {
// can't find anything to reload
@@ -347,15 +348,10 @@ function replaceConsole(logger) {
});
}
function loadAppenders() {
var appenderList = fs.readdirSync(__dirname + '/appenders');
appenderList.forEach(function(file) {
if (/\.js$/.test(file)) {
var appenderModule = require('./appenders/' + file);
module.exports.appenders[appenderModule.name] = appenderModule.appender;
appenderMakers[appenderModule.name] = appenderModule.configure;
}
});
function loadAppender(appender) {
var appenderModule = require('./appenders/' + appender);
module.exports.appenders[appenderModule.name] = appenderModule.appender;
appenderMakers[appenderModule.name] = appenderModule.configure;
}
module.exports = {
@@ -363,6 +359,7 @@ module.exports = {
getDefaultLogger: getDefaultLogger,
addAppender: addAppender,
loadAppender: loadAppender,
clearAppenders: clearAppenders,
configure: configure,
@@ -371,10 +368,15 @@ module.exports = {
layouts: layouts,
appenders: {},
appenderMakers: appenderMakers,
connectLogger: require('./connect-logger').connectLogger
};
loadAppenders();
//load the old-style appenders
[ 'console', 'file', 'logLevelFilter' ].forEach(function(appender) {
loadAppender(appender);
});
//set ourselves up if we can find a default log4js.json
configure(findConfiguration());
//replace console.log, etc with log4js versions