diff --git a/lib/appenders/smtp.js b/lib/appenders/smtp.js index fa3e775..d907213 100644 --- a/lib/appenders/smtp.js +++ b/lib/appenders/smtp.js @@ -1,7 +1,8 @@ "use strict"; var layouts = require("../layouts") , mailer = require("nodemailer") -, os = require('os'); +, os = require('os') +, unsentCount = 0; /** * SMTP Appender. Sends logging events using SMTP protocol. @@ -27,6 +28,7 @@ function smtpAppender(config, layout) { var transport = mailer.createTransport(config.transport, config[config.transport]); var firstEvent = logEventBuffer[0]; var body = ""; + var count = logEventBuffer.length; while (logEventBuffer.length > 0) { body += layout(logEventBuffer.shift()) + "\n"; } @@ -51,6 +53,7 @@ function smtpAppender(config, layout) { console.error("log4js.smtpAppender - Error happened", error); } transport.close(); + unsentCount -= count; }); } } @@ -65,6 +68,7 @@ function smtpAppender(config, layout) { } return function(loggingEvent) { + unsentCount++; logEventBuffer.push(loggingEvent); if (sendInterval > 0) { scheduleSend(); @@ -82,7 +86,16 @@ function configure(config) { return smtpAppender(config, layout); } +function shutdown(cb) { + async.until(function() { + return unsentCount === 0; + }, function(done) { + setTimeout(done, 100); + }, cb); +} + exports.name = "smtp"; exports.appender = smtpAppender; exports.configure = configure; +exports.shutdown = shutdown;