From 8492519e3b0541b6f43898babebfafec4b62f094 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Sat, 25 May 2013 13:04:48 +1000 Subject: [PATCH] Fixing issue #137 --- examples/smtp-appender.js | 43 +++++++++++++++++++++++++++++++++++++++ lib/appenders/smtp.js | 21 +++++++++++-------- 2 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 examples/smtp-appender.js diff --git a/examples/smtp-appender.js b/examples/smtp-appender.js new file mode 100644 index 0000000..134ce90 --- /dev/null +++ b/examples/smtp-appender.js @@ -0,0 +1,43 @@ +//Note that smtp appender needs nodemailer to work. +//If you haven't got nodemailer installed, you'll get cryptic +//"cannot find module" errors when using the smtp appender +var log4js = require('../lib/log4js') +, log +, logmailer +, i = 0; +log4js.configure({ + "appenders": [ + { + type: "console", + category: "test" + }, + { + "type": "smtp", + "recipients": "logfilerecipient@logging.com", + "sendInterval": 5, + "transport": "SMTP", + "SMTP": { + "host": "smtp.gmail.com", + "secureConnection": true, + "port": 465, + "auth": { + "user": "someone@gmail", + "pass": "********************" + }, + "debug": true + }, + "category": "mailer" + } + ] +}); +log = log4js.getLogger("test"); +logmailer = log4js.getLogger("mailer"); + +function doTheLogging(x) { + log.info("Logging something %d", x); + logmailer.info("Logging something %d", x); +} + +for ( ; i < 500; i++) { + doTheLogging(i); +} diff --git a/lib/appenders/smtp.js b/lib/appenders/smtp.js index 47c808d..876508b 100644 --- a/lib/appenders/smtp.js +++ b/lib/appenders/smtp.js @@ -1,6 +1,6 @@ var layouts = require("../layouts"), - mailer = require("nodemailer"), - os = require('os'); +mailer = require("nodemailer"), +os = require('os'); /** * SMTP Appender. Sends logging events using SMTP protocol. @@ -17,12 +17,13 @@ function smtpAppender(config, layout) { var logEventBuffer = []; var sendTimer; - var transport = mailer.createTransport(config.transport, config[config.transport]); function sendBuffer() { - if (logEventBuffer.length == 0) + if (logEventBuffer.length == 0) { return; + } + var transport = mailer.createTransport(config.transport, config[config.transport]); var firstEvent = logEventBuffer[0]; var body = ""; while (logEventBuffer.length > 0) { @@ -35,29 +36,33 @@ function smtpAppender(config, layout) { text: body, headers: {"Hostname": os.hostname()} }; - if (config.sender) + if (config.sender) { msg.from = config.sender; + } transport.sendMail(msg, function(error, success) { if (error) { console.error("log4js.smtpAppender - Error happened ", error); } + transport.close(); }); } function scheduleSend() { - if (!sendTimer) + if (!sendTimer) { sendTimer = setTimeout(function() { sendTimer = null; sendBuffer(); }, sendInterval); + } } return function(loggingEvent) { logEventBuffer.push(loggingEvent); - if (sendInterval > 0) + if (sendInterval > 0) { scheduleSend(); - else + } else { sendBuffer(); + } }; }