From 3ec9811b5edd22816e46adf477f36dc5b62794af Mon Sep 17 00:00:00 2001 From: John Engler Date: Sat, 5 Apr 2014 15:12:45 -0700 Subject: [PATCH] Update log4js module to expose a shutdown function. loadAppender will check for a shutdown function exposed by a loaded appender. If present, it will be cached so that the shutdown function can execute it. The intent here is that a Node application would not invoked process.exit until after the log4js shutdown callback returns. --- lib/log4js.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/log4js.js b/lib/log4js.js index f89369c..f2677ee 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -56,6 +56,7 @@ var events = require('events') , appenders = {} , loggers = {} , appenderMakers = {} +, appenderShutdowns = {} , defaultConfig = { appenders: [ { type: "console" } @@ -299,24 +300,23 @@ function loadAppender(appender) { appenderModule = require(appender); } module.exports.appenders[appender] = appenderModule.appender.bind(appenderModule); + if (appenderModule.shutdown) { + appenderShutdowns[appender] = appenderModule.shutdown.bind(appenderModule); + } appenderMakers[appender] = appenderModule.configure.bind(appenderModule); } function shutdown(cb) { - var allAppenders = Object.keys(appenders).reduce( + var shutdownFunctions = Object.keys(appenderShutdowns).reduce( function(accum, category) { - return accum.concat(appenders[category]); + return accum.concat(appenderShutdowns[category]); }, []); async.forEach( - allAppenders, - function(appender, done) { - if (appender.shutdown) { - appender.shutdown(done); - } else { - done(); - } + shutdownFunctions, + function(shutdownFn, done) { + shutdownFn(done); }, - function() { process.nextTick(cb); } + cb ); }