From adfad9ad2078b5513d549fb6a262e665a8d2c060 Mon Sep 17 00:00:00 2001 From: hasegawa-jun Date: Wed, 4 Mar 2015 09:13:30 +0900 Subject: [PATCH 1/2] Implemented shutdown function for SMTP appender --- lib/appenders/smtp.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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; From 4dfe14a0c253122a251bd62e01f4430949027f95 Mon Sep 17 00:00:00 2001 From: hasegawa-jun Date: Tue, 17 Mar 2015 09:25:22 +0900 Subject: [PATCH 2/2] added shutdownTimeout option --- lib/appenders/smtp.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/appenders/smtp.js b/lib/appenders/smtp.js index d907213..441d228 100644 --- a/lib/appenders/smtp.js +++ b/lib/appenders/smtp.js @@ -2,7 +2,8 @@ var layouts = require("../layouts") , mailer = require("nodemailer") , os = require('os') -, unsentCount = 0; +, unsentCount = 0 +, shutdownTimeout; /** * SMTP Appender. Sends logging events using SMTP protocol. @@ -12,6 +13,7 @@ var layouts = require("../layouts") * @param config appender configuration data * config.sendInterval time between log emails (in seconds), if 0 * then every event sends an email +* config.shutdownTimeout time to give up remaining emails (in seconds; defaults to 5). * @param layout a function that takes a logevent and returns a string (defaults to basicLayout). */ function smtpAppender(config, layout) { @@ -22,6 +24,8 @@ function smtpAppender(config, layout) { var logEventBuffer = []; var sendTimer; + shutdownTimeout = ('shutdownTimeout' in config ? config.shutdownTimeout : 5) * 1000; + function sendBuffer() { if (logEventBuffer.length > 0) { @@ -87,8 +91,11 @@ function configure(config) { } function shutdown(cb) { - async.until(function() { - return unsentCount === 0; + if (shutdownTimeout > 0) { + setTimeout(function() { unsentCount = 0; }, shutdownTimeout); + } + async.whilst(function() { + return unsentCount > 0; }, function(done) { setTimeout(done, 100); }, cb);