From e789df98849df222d424fbc1ceeb05002a1ade2a Mon Sep 17 00:00:00 2001 From: Guillaume Chauvet Date: Fri, 27 Nov 2015 14:29:59 +0100 Subject: [PATCH 1/4] Unitary test for sending logs as email attachment instead of body content --- test/smtpAppender-test.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/smtpAppender-test.js b/test/smtpAppender-test.js index 1cc2d08..6e4bf23 100644 --- a/test/smtpAppender-test.js +++ b/test/smtpAppender-test.js @@ -284,5 +284,32 @@ vows.describe('log4js smtpAppender').addBatch({ 'message should contain proper data': function (result) { checkMessages(result); } + }, + 'attachement config': { + topic: function () { + var setup = setupLogging('attachement config', { + recipients: 'recipient@domain.com', + attachement: { + enable: true + }, + SMTP: { + port: 25, + auth: { + user: 'user@domain.com' + } + } + }); + setup.logger.info('Log event #1'); + return setup; + }, + 'message should contain proper data': function (result) { + assert.equal(result.results.length, 1); + assert.equal(result.results[0].attachments.length, 1); + var attachment = result.results[0].attachments[0]; + assert.equal(result.results[0].text, "See logs as attachement"); + assert.equal(attachment.filename, "default.log"); + assert.equal(attachment.contentType, "text/x-log"); + assert.ok(new RegExp('.+Log event #' + 1 + '\n$').test(attachment.content)); + } } }).export(module); From fb9fee9c548900e437cbf633079a437f674438e1 Mon Sep 17 00:00:00 2001 From: Guillaume Chauvet Date: Fri, 27 Nov 2015 14:30:21 +0100 Subject: [PATCH 2/4] implementation for sending logs as email attachment instead of body content --- lib/appenders/smtp.js | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/appenders/smtp.js b/lib/appenders/smtp.js index 557bc71..203e94f 100644 --- a/lib/appenders/smtp.js +++ b/lib/appenders/smtp.js @@ -35,10 +35,17 @@ function sendBuffer() { headers: {"Hostname": os.hostname()} }; - if (!config.html) { - msg.text = body; + if (true === config.attachement.enable) { + msg[config.html ? "html" : "text"] = config.attachement.message; + msg.attachments = [ + { + filename: config.attachement.filename, + contentType: 'text/x-log', + content: body + } + ]; } else { - msg.html = body; + msg[config.html ? "html" : "text"] = body; } if (config.sender) { @@ -90,12 +97,20 @@ function scheduleSend() { */ function smtpAppender(_config, _layout) { config = _config; + + if (!config.attachement) { + config.attachement = {}; + } + + config.attachement.enable = config.attachement && config.attachement.enable; + config.attachement.message = config.attachement && config.attachement.message || "See logs as attachement"; + config.attachement.filename = config.attachement && config.attachement.filename || "default.log"; layout = _layout || layouts.basicLayout; subjectLayout = layouts.messagePassThroughLayout; sendInterval = config.sendInterval * 1000 || 0; - + shutdownTimeout = ('shutdownTimeout' in config ? config.shutdownTimeout : 5) * 1000; - + return function (loggingEvent) { unsentCount++; logEventBuffer.push(loggingEvent); @@ -118,7 +133,8 @@ function configure(_config) { function shutdown(cb) { if (shutdownTimeout > 0) { setTimeout(function () { - if(sendTimer) clearTimeout(sendTimer); + if (sendTimer) + clearTimeout(sendTimer); sendBuffer(); }, shutdownTimeout); } From 9df030c32ccf39c3f8b702c80dbcee78fc366eb4 Mon Sep 17 00:00:00 2001 From: Guillaume Chauvet Date: Fri, 27 Nov 2015 15:10:52 +0100 Subject: [PATCH 3/4] Fix typo --- lib/appenders/smtp.js | 16 ++++++++-------- test/smtpAppender-test.js | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/appenders/smtp.js b/lib/appenders/smtp.js index 203e94f..103ee02 100644 --- a/lib/appenders/smtp.js +++ b/lib/appenders/smtp.js @@ -35,11 +35,11 @@ function sendBuffer() { headers: {"Hostname": os.hostname()} }; - if (true === config.attachement.enable) { - msg[config.html ? "html" : "text"] = config.attachement.message; + if (true === config.attachment.enable) { + msg[config.html ? "html" : "text"] = config.attachment.message; msg.attachments = [ { - filename: config.attachement.filename, + filename: config.attachment.filename, contentType: 'text/x-log', content: body } @@ -98,13 +98,13 @@ function scheduleSend() { function smtpAppender(_config, _layout) { config = _config; - if (!config.attachement) { - config.attachement = {}; + if (!config.attachment) { + config.attachment = {}; } - config.attachement.enable = config.attachement && config.attachement.enable; - config.attachement.message = config.attachement && config.attachement.message || "See logs as attachement"; - config.attachement.filename = config.attachement && config.attachement.filename || "default.log"; + config.attachment.enable = config.attachment && config.attachment.enable; + config.attachment.message = config.attachment && config.attachment.message || "See logs as attachment"; + config.attachment.filename = config.attachment && config.attachment.filename || "default.log"; layout = _layout || layouts.basicLayout; subjectLayout = layouts.messagePassThroughLayout; sendInterval = config.sendInterval * 1000 || 0; diff --git a/test/smtpAppender-test.js b/test/smtpAppender-test.js index 6e4bf23..3fa1430 100644 --- a/test/smtpAppender-test.js +++ b/test/smtpAppender-test.js @@ -285,11 +285,11 @@ vows.describe('log4js smtpAppender').addBatch({ checkMessages(result); } }, - 'attachement config': { + 'attachment config': { topic: function () { - var setup = setupLogging('attachement config', { + var setup = setupLogging('attachment config', { recipients: 'recipient@domain.com', - attachement: { + attachment: { enable: true }, SMTP: { @@ -306,7 +306,7 @@ vows.describe('log4js smtpAppender').addBatch({ assert.equal(result.results.length, 1); assert.equal(result.results[0].attachments.length, 1); var attachment = result.results[0].attachments[0]; - assert.equal(result.results[0].text, "See logs as attachement"); + assert.equal(result.results[0].text, "See logs as attachment"); assert.equal(attachment.filename, "default.log"); assert.equal(attachment.contentType, "text/x-log"); assert.ok(new RegExp('.+Log event #' + 1 + '\n$').test(attachment.content)); From 0936052f6573ee9d796f6a704d58128a06a46924 Mon Sep 17 00:00:00 2001 From: Guillaume Chauvet Date: Wed, 9 Dec 2015 11:03:59 +0100 Subject: [PATCH 4/4] Refactoring: removing redundant check --- lib/appenders/smtp.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/appenders/smtp.js b/lib/appenders/smtp.js index 103ee02..8299177 100644 --- a/lib/appenders/smtp.js +++ b/lib/appenders/smtp.js @@ -89,7 +89,7 @@ function scheduleSend() { * It can either send an email on each event or group several * logging events gathered during specified interval. * - * @param config appender configuration data + * @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). @@ -102,9 +102,9 @@ function smtpAppender(_config, _layout) { config.attachment = {}; } - config.attachment.enable = config.attachment && config.attachment.enable; - config.attachment.message = config.attachment && config.attachment.message || "See logs as attachment"; - config.attachment.filename = config.attachment && config.attachment.filename || "default.log"; + config.attachment.enable = !!config.attachment.enable; + config.attachment.message = config.attachment.message || "See logs as attachment"; + config.attachment.filename = config.attachment.filename || "default.log"; layout = _layout || layouts.basicLayout; subjectLayout = layouts.messagePassThroughLayout; sendInterval = config.sendInterval * 1000 || 0;