Merge pull request #89 from ixti/master
Fix possible memleak with `exit` event handlers
This commit is contained in:
commit
c6a0e58409
@ -5,6 +5,9 @@ var layouts = require('../layouts')
|
|||||||
, os = require('os')
|
, os = require('os')
|
||||||
, eol = os.EOL || '\n';
|
, eol = os.EOL || '\n';
|
||||||
|
|
||||||
|
var openFiles = [];
|
||||||
|
var listenerAtttached = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* File Appender writing the logs to a text file. Supports rolling of logs by size.
|
* File Appender writing the logs to a text file. Supports rolling of logs by size.
|
||||||
*
|
*
|
||||||
@ -42,10 +45,18 @@ function fileAppender (file, layout, logSize, numBackups) {
|
|||||||
|
|
||||||
var logFile = openTheStream(file, logSize, numBackups);
|
var logFile = openTheStream(file, logSize, numBackups);
|
||||||
|
|
||||||
|
// push file to the stack of open handlers
|
||||||
|
openFiles.push(logFile);
|
||||||
|
|
||||||
//close the file on process exit.
|
//close the file on process exit.
|
||||||
process.on('exit', function() {
|
if (!listenerAtttached) {
|
||||||
logFile.end();
|
listenerAtttached = true;
|
||||||
});
|
process.on('exit', function() {
|
||||||
|
openFiles.forEach(function (file) {
|
||||||
|
file.end();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return function(loggingEvent) {
|
return function(loggingEvent) {
|
||||||
logFile.write(layout(loggingEvent) + eol, "utf8");
|
logFile.write(layout(loggingEvent) + eol, "utf8");
|
||||||
|
@ -15,6 +15,24 @@ function remove(filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vows.describe('log4js fileAppender').addBatch({
|
vows.describe('log4js fileAppender').addBatch({
|
||||||
|
'adding multiple fileAppenders': {
|
||||||
|
topic: function () {
|
||||||
|
var listenersCount = process.listeners('exit').length
|
||||||
|
, logger = log4js.getLogger('default-settings')
|
||||||
|
, count = 5, logfile;
|
||||||
|
|
||||||
|
while (count--) {
|
||||||
|
logfile = path.join(__dirname, '/fa-default-test' + count + '.log');
|
||||||
|
log4js.addAppender(require('../lib/appenders/file').appender(logfile), 'default-settings');
|
||||||
|
}
|
||||||
|
|
||||||
|
return listenersCount;
|
||||||
|
},
|
||||||
|
|
||||||
|
'does not adds more than one `exit` listeners': function (initialCount) {
|
||||||
|
assert.ok(process.listeners('exit').length <= initialCount + 1);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
'with default fileAppender settings': {
|
'with default fileAppender settings': {
|
||||||
topic: function() {
|
topic: function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user