10000 Sends a single email with remaining logs when shutdown is called · chewax/log4js-node@273aaf6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 273aaf6

Browse files
author
Guillaume Chauvet
committed
Sends a single email with remaining logs when shutdown is called
1 parent 9855004 commit 273aaf6

File tree

1 file changed

+88
-78
lines changed

1 file changed

+88
-78
lines changed

lib/appenders/smtp.js

Lines changed: 88 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,101 @@
11
"use strict";
2-
var layouts = require("../layouts")
3-
, mailer = require("nodemailer")
4-
, os = require('os')
5-
, async = require('async')
6-
, unsentCount = 0
7-
, shutdownTimeout;
82

9-
/**
10-
* SMTP Appender. Sends logging events using SMTP protocol.
11-
* It can either send an email on each event or group several
12-
* logging events gathered during specified interval.
13-
*
14-
* @param config appender configuration data
15-
* config.sendInterval time between log emails (in seconds), if 0
16-
* then every event sends an email
17-
* config.shutdownTimeout time to give up remaining emails (in seconds; defaults to 5).
18-
* @param layout a function that takes a logevent and returns a string (defaults to basicLayout).
19-
*/
20-
function smtpAppender(config, layout) {
21-
layout = layout || layouts.basicLayout;
22-
var subjectLayout = layouts.messagePassThroughLayout;
23-
var sendInterval = config.sendInterval * 1000 || 0;
3+
var layouts = require("../layouts");
4+
var mailer = require("nodemailer");
5+
var os = require('os');
6+
var async = require('async');
247

25-
var logEventBuffer = [];
26-
var sendTimer;
8+
var logEventBuffer = [];
9+
var subjectLayout;
10+
var layout;
2711

28-
shutdownTimeout = ('shutdownTimeout' in config ? config.shutdownTimeout : 5) * 1000;
12+
var unsentCount = 0;
13+
var shutdownTimeout;
2914

30-
function sendBuffer() {
31-
if (logEventBuffer.length > 0) {
15+
var sendInterval;
16+
var sendTimer;
3217

33-
var transportOpts = getTransportOptions(config);
34-
var transport = mailer.createTransport(transportOpts);
35-
var firstEvent = logEventBuffer[0];
36-
var body = "";
37-
var count = logEventBuffer.length;
38-
while (logEventBuffer.length > 0) {
39-
body += layout(logEventBuffer.shift(), config.timezoneOffset) + "\n";
40-
}
18+
var config;
4119

42-
var msg = {
43-
to: config.recipients,
44-
subject: config.subject || subjectLayout(firstEvent),
45-
headers: {"Hostname": os.hostname()}
46-
};
20+
function sendBuffer() {
21+
if (logEventBuffer.length > 0) {
4722

48-
if (!config.html) {
49-
msg.text = body;
50-
} else {
51-
msg.html = body;
52-
}
23+
var transportOpts = getTransportOptions(config);
24+
var transport = mailer.createTransport(transportOpts);
25+
var firstEvent = logEventBuffer[0];
26+
var body = "";
27+
var count = logEventBuffer.length;
28+
while (logEventBuffer.length > 0) {
29+
body += layout(logEventBuffer.shift(), config.timezoneOffset) + "\n";
30+
}
5331

54-
if (config.sender) {
55-
msg.from = config.sender;
56-
}
57-
transport.sendMail(msg, function (error, success) {
58-
if (error) {
59-
console.error("log4js.smtpAppender - Error happened", error);
60-
}
61-
transport.close();
62-
unsentCount -= count;
63-
});
32+
var msg = {
33+
to: config.recipients,
34+
subject: config.subject || subjectLayout(firstEvent),
35+
headers: {"Hostname": os.hostname()}
36+
};
37+
38+
if (!config.html) {
39+
msg.text = body;
40+
} else {
41+
msg.html = body;
6442
}
65-
}
6643

67-
function scheduleSend() {
68-
if (!sendTimer) {
69-
sendTimer = setTimeout(function () {
70-
sendTimer = null;
71-
sendBuffer();
72-
}, sendInterval);
44+
if (config.sender) {
45+
msg.from = config.sender;
7346
}
47+
transport.sendMail(msg, function (error) {
48+
if (error) {
49+
console.error("log4js.smtpAppender - Error happened", error);
50+
}
51+
transport.close();
52+
unsentCount -= count;
53+
});
7454
}
55+
}
7556

76-
function getTransportOptions(config) {
77-
var transportOpts = null;
78-
if (config.SMTP) {
79-
transportOpts = config.SMTP;
80-
} else if (config.transport) {
81-
var plugin = config.transport.plugin || 'smtp';
82-
var transportModule = 'nodemailer-' + plugin + '-transport';
83-
var transporter = require(transportModule);
84-
transportOpts = transporter(config.transport.options);
85-
}
57+
function getTransportOptions() {
58+
var transportOpts = null;
59+
if (config.SMTP) {
60+
transportOpts = config.SMTP;
61+
} else if (config.transport) {
62+
var plugin = config.transport.plugin || 'smtp';
63+
var transportModule = 'nodemailer-' + plugin + '-transport';
64+
var transporter = require(transportModule);
65+
transportOpts = transporter(config.transport.options);
66+
}
67+
68+
return transportOpts;
69+
}
8670

87-
return transportOpts;
71+
function scheduleSend() {
72+
if (!sendTimer) {
73+
sendTimer = setTimeout(function () {
74+
sendTimer = null;
75+
sendBuffer();
76+
}, sendInterval);
8877
}
78+
}
8979

80+
/**
81+
* SMTP Appender. Sends logging events using SMTP protocol.
82+
* It can either send an email on each event or group several
83+
* logging events gathered during specified interval.
84+
*
85+
* @param config appender configuration data
86+
* config.sendInterval time between log emails (in seconds), if 0
87+
* then every event sends an email
88+
* config.shutdownTimeout time to give up remaining emails (in seconds; defaults to 5).
89+
* @param _layout a function that takes a logevent and returns a string (defaults to basicLayout).
90+
*/
91+
function smtpAppender(_config, _layout) {
92+
config = _config;
93+
layout = _layout || layouts.basicLayout;
94+
subjectLayout = layouts.messagePassThroughLayout;
95+
sendInterval = config.sendInterval * 1000 || 0;
96+
97+
shutdownTimeout = ('shutdownTimeout' in config ? config.shutdownTimeout : 5) * 1000;
98+
9099
return function (loggingEvent) {
91100
unsentCount++;
92101
logEventBuffer.push(loggingEvent);
@@ -98,18 +107,19 @@ function smtpAppender(config, layout) {
98107
};
99108
}
100109

101-
function configure(config) {
102-
var layout;
103-
if (config.layout) {
104-
layout = layouts.layout(config.layout.type, config.layout);
110+
function configure(_config) {
111+
config = _config;
112+
if (_config.layout) {
113+
layout = layouts.layout(_config.layout.type, _config.layout);
105114
}
106-
return smtpAppender(config, layout);
115+
return smtpAppender(_config, layout);
107116
}
108117

109118
function shutdown(cb) {
110119
if (shutdownTimeout > 0) {
111120
setTimeout(function () {
112-
unsentCount = 0;
121+
if(sendTimer) clearTimeout(sendTimer);
122+
sendBuffer();
113123
}, shutdownTimeout);
114124
}
115125
async.whilst(function () {

0 commit comments

Comments
 (0)
0