diff --git a/CHANGES.md b/CHANGES.md index b55e7d7..23639c3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,7 @@ Known issues: ## bunyan 0.23.1 (not yet released) -(nothing yet) +- #97 Unref rotating-file timeout which was preventing processes from exiting ## bunyan 0.23.0 diff --git a/lib/bunyan.js b/lib/bunyan.js index da73279..aba58a8 100644 --- a/lib/bunyan.js +++ b/lib/bunyan.js @@ -1017,6 +1017,9 @@ RotatingFileStream.prototype._setupNextRot = function () { this.timeout = setTimeout( function () { self.rotate(); }, this.rotAt - Date.now()); + if (typeof this.timeout.unref === 'function') { + this.timeout.unref(); + } } RotatingFileStream.prototype._nextRotTime = function _nextRotTime(first) { diff --git a/test/process-exit.js b/test/process-exit.js new file mode 100644 index 0000000..5e547c9 --- /dev/null +++ b/test/process-exit.js @@ -0,0 +1,11 @@ +var bunyan = require('../lib/bunyan'); +var log = bunyan.createLogger({ + name: 'default', + streams: [{ + type: 'rotating-file', + path: __dirname + '/log.test.rot.log', + period: '1d', + count: 7 + }] +}); +console.log('done'); \ No newline at end of file diff --git a/test/process-exit.test.js b/test/process-exit.test.js new file mode 100644 index 0000000..954cf46 --- /dev/null +++ b/test/process-exit.test.js @@ -0,0 +1,21 @@ +'use strict'; +/* + * Test that bunyan process will terminate + */ + +var exec = require('child_process').exec; + +// node-tap API +if (require.cache[__dirname + '/tap4nodeunit.js']) + delete require.cache[__dirname + '/tap4nodeunit.js']; +var tap4nodeunit = require('./tap4nodeunit.js'); +var test = tap4nodeunit.test; + +test('log with rotating file stream will terminate gracefully', function (t) { + exec('node ' +__dirname + '/process-exit.js', {timeout: 1000}, function(err, stdout, stderr) { + t.ifError(err); + t.equal(stdout, 'done\n'); + t.equal(stderr, ''); + t.end(); + }); +}); \ No newline at end of file