From 23a2758a6ddf7c23c1c8e62e654b15afcd68c9e3 Mon Sep 17 00:00:00 2001 From: Danny Brain Date: Thu, 27 Oct 2011 16:25:38 +1100 Subject: [PATCH] Lazy load any new style appenders --- lib/appenders/hookio.js | 1 + lib/log4js.js | 21 +++++++++++---------- package.json | 4 ++-- test/hookioAppender.js | 10 ++++++++-- test/logging.js | 24 ++++++++++++------------ 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/lib/appenders/hookio.js b/lib/appenders/hookio.js index 44f5c06..3ce3301 100644 --- a/lib/appenders/hookio.js +++ b/lib/appenders/hookio.js @@ -43,6 +43,7 @@ function createAppender(hookioOptions, actualAppender) { 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; diff --git a/lib/log4js.js b/lib/log4js.js index 2eea7a9..340f5c3 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -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); @@ -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, @@ -375,7 +372,11 @@ module.exports = { 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 diff --git a/package.json b/package.json index 7487e3b..fc006e4 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,10 @@ "lib": "lib" }, "dependencies": { - "hook.io": "0.7.7" }, "devDependencies": { "vows": ">=0.5.2", - "sandboxed-module": ">= 0.1.1" + "sandboxed-module": ">= 0.1.1", + "hook.io": "0.7.7" } } diff --git a/test/hookioAppender.js b/test/hookioAppender.js index 70c19b9..87afdc0 100644 --- a/test/hookioAppender.js +++ b/test/hookioAppender.js @@ -4,13 +4,18 @@ var sandbox = require('sandboxed-module'); function fancyResultingHookioAppender(opts) { var result = { ons: {}, emissions: {}, logged: [] }; + var fakeLog4Js = { - appenderMakers: { file: function (config) { + appenderMakers: {} + }; + fakeLog4Js.loadAppender = function (appender) { + fakeLog4Js.appenderMakers[appender] = function (config) { return function log(logEvent) { result.logged.push(logEvent); } - }} + }; }; + var fakeHookIo = { Hook: function() { } }; fakeHookIo.Hook.prototype.start = function () { result.startCalled = true; @@ -30,6 +35,7 @@ function fancyResultingHookioAppender(opts) { result.ons[on].functionToExec(data); } }; + return { theResult: result, theModule: sandbox.require('../lib/appenders/hookio', { requires: { diff --git a/test/logging.js b/test/logging.js index 0c881c9..94c699b 100644 --- a/test/logging.js +++ b/test/logging.js @@ -69,7 +69,7 @@ vows.describe('log4js').addBatch({ , log4js = sandbox.require( '../lib/log4js' , { requires: - { './appenders/file.js': + { './appenders/file': { name: "file" , appender: function() {} @@ -123,10 +123,10 @@ vows.describe('log4js').addBatch({ }); }, readdirSync: function() { - return ['file.js']; + return ['file']; } } - , './appenders/file.js': + , './appenders/file': { name: "file" , appender: function() {} @@ -168,7 +168,7 @@ vows.describe('log4js').addBatch({ '../lib/log4js' , { requires: { - './appenders/console.js': fakeConsoleAppender + './appenders/console': fakeConsoleAppender } } ); @@ -303,7 +303,7 @@ vows.describe('log4js').addBatch({ { requires: { 'fs': fakeFS - , './appenders/console.js': fakeConsole + , './appenders/console': fakeConsole } } ); @@ -434,7 +434,7 @@ vows.describe('log4js').addBatch({ { requires: { 'fs': fakeFS, - './appenders/console.js': fakeConsole + './appenders/console': fakeConsole }, globals: { 'console': fakeConsole, @@ -462,7 +462,7 @@ vows.describe('log4js').addBatch({ assert.equal(logEvents[2].data[0], 'debug4'); } }, - + 'configuration reload with configuration staying the same' : { topic: function() { var pathsChecked = [], @@ -494,10 +494,10 @@ vows.describe('log4js').addBatch({ } }, fakeConsole = { - 'name': 'console', + 'name': 'console', 'appender': function () { return function(evt) { logEvents.push(evt); }; - }, + }, 'configure': function (config) { return fakeConsole.appender(); } @@ -510,8 +510,8 @@ vows.describe('log4js').addBatch({ '../lib/log4js', { requires: { - 'fs': fakeFS, - './appenders/console.js': fakeConsole + 'fs': fakeFS, + './appenders/console': fakeConsole }, globals: { 'console': fakeConsole, @@ -538,7 +538,7 @@ vows.describe('log4js').addBatch({ var logEvents = args[1]; assert.length(logEvents, 2); assert.equal(logEvents[0].data[0], 'info1'); - assert.equal(logEvents[1].data[0], 'info3'); + assert.equal(logEvents[1].data[0], 'info3'); } }