From 7f078161e47ad3d33d091c9f0906801d13fedd92 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Wed, 2 Nov 2016 08:08:28 +1100 Subject: [PATCH] fixed to use streamroller --- lib/appenders/file.js | 42 ++++++++++++++-------------------- test/vows/fileAppender-test.js | 18 ++++++++------- 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/lib/appenders/file.js b/lib/appenders/file.js index 1ec78dd..4e767ad 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -1,5 +1,6 @@ "use strict"; -var layouts = require('../layouts') +var debug = require('debug')('log4js:file') +, layouts = require('../layouts') , path = require('path') , fs = require('fs') , streams = require('streamroller') @@ -34,10 +35,10 @@ process.on('SIGHUP', function() { * if not provided then logs won't be rotated. * @param numBackups - the number of log files to keep after logSize * has been reached (default 5) - * @param compress - flag that controls log file compression + * @param options - options to be passed to the underlying stream * @param timezoneOffset - optional timezone offset in minutes (default system local) */ -function fileAppender (file, layout, logSize, numBackups, compress, timezoneOffset) { +function fileAppender (file, layout, logSize, numBackups, options, timezoneOffset) { var bytesWritten = 0; file = path.normalize(file); layout = layout || layouts.basicLayout; @@ -45,13 +46,14 @@ function fileAppender (file, layout, logSize, numBackups, compress, timezoneOffs //there has to be at least one backup if logSize has been specified numBackups = numBackups === 0 ? 1 : numBackups; + debug("Creating file appender (", file, ", ", logSize, ", ", numBackups, ", ", options, ")"); var writer = { - stream: openTheStream(file, logSize, numBackups), + stream: openTheStream(file, logSize, numBackups, options), reopen: function() { this.stream.end(); - this.stream = openTheStream(file, logSize, numBackups); + this.stream = openTheStream(file, logSize, numBackups, options); } - } + }; // push file to the stack of open handlers openFiles.push(writer); @@ -62,23 +64,13 @@ function fileAppender (file, layout, logSize, numBackups, compress, timezoneOffs } -function openTheStream(file, fileSize, numFiles) { - var stream; - if (fileSize) { - stream = new streams.RollingFileStream( - file, - fileSize, - numFiles, - { "compress": compress } - ); - } else { - stream = fs.createWriteStream( - file, - { encoding: "utf8", - mode: parseInt('0644', 8), - flags: 'a' } - ); - } +function openTheStream(file, fileSize, numFiles, options) { + var stream = new streams.RollingFileStream( + file, + fileSize, + numFiles, + options + ); stream.on("error", function (err) { console.error("log4js.fileAppender - Writing to file %s, error happened ", file, err); }); @@ -101,8 +93,8 @@ function configure(config, options) { layout, config.maxLogSize, config.backups, - config.compress, - config.timezoneOffset + config.timezoneOffset, + config ); } diff --git a/test/vows/fileAppender-test.js b/test/vows/fileAppender-test.js index e897b77..8f45c7e 100644 --- a/test/vows/fileAppender-test.js +++ b/test/vows/fileAppender-test.js @@ -26,7 +26,7 @@ vows.describe('log4js fileAppender').addBatch({ , count = 5, logfile; while (count--) { - logfile = path.join(__dirname, '/fa-default-test' + count + '.log'); + logfile = path.join(__dirname, 'fa-default-test' + count + '.log'); log4js.addAppender( require('../../lib/appenders/file').appender(logfile), 'default-settings' @@ -36,8 +36,8 @@ vows.describe('log4js fileAppender').addBatch({ return listenersCount; }, - 'does not add more than one `exit` listeners': function (initialCount) { - assert.ok(process.listeners('exit').length <= initialCount + 1); + 'does not add more than one `exit` listener': function (initialCount) { + assert.equal(initialCount + 1, process.listeners('exit').length); } }, @@ -51,7 +51,9 @@ vows.describe('log4js fileAppender').addBatch({ globals: { process: { on: function(evt, listener) { - exitListener = listener; + if (evt == 'exit') { + exitListener = listener; + } } } }, @@ -196,7 +198,7 @@ vows.describe('log4js fileAppender').addBatch({ }, 'with a max file size and no backups': { topic: function() { - var testFile = path.join(__dirname, '/fa-maxFileSize-test.log') + var testFile = path.join(__dirname, 'fa-maxFileSize-test.log') , logger = log4js.getLogger('max-file-size') , that = this; remove(testFile); @@ -234,7 +236,7 @@ vows.describe('log4js fileAppender').addBatch({ }, 'with a max file size and 2 backups': { topic: function() { - var testFile = path.join(__dirname, '/fa-maxFileSize-with-backups-test.log') + var testFile = path.join(__dirname, 'fa-maxFileSize-with-backups-test.log') , logger = log4js.getLogger('max-file-size-backups'); remove(testFile); remove(testFile+'.1'); @@ -307,7 +309,7 @@ vows.describe('log4js fileAppender').addBatch({ }, 'with a max file size and 2 compressed backups': { topic: function() { - var testFile = path.join(__dirname, '/fa-maxFileSize-with-backups-compressed-test.log') + var testFile = path.join(__dirname, 'fa-maxFileSize-with-backups-compressed-test.log') , logger = log4js.getLogger('max-file-size-backups'); remove(testFile); remove(testFile+'.1.gz'); @@ -317,7 +319,7 @@ vows.describe('log4js fileAppender').addBatch({ log4js.clearAppenders(); log4js.addAppender( require('../../lib/appenders/file').appender( - testFile, log4js.layouts.basicLayout, 50, 2, true + testFile, log4js.layouts.basicLayout, 50, 2, { compress: true } ), 'max-file-size-backups' );