Merge branch 'alwaysIncludePattern' of https://github.com/issacg/log4js-node into isaacg-alwaysIncludePattern

This commit is contained in:
Gareth Jones 2013-05-04 16:10:02 +10:00
commit 097ae3d7f1
3 changed files with 53 additions and 7 deletions

View File

@ -19,10 +19,10 @@ process.on('exit', function() {
* also used to check when to roll files - defaults to '.yyyy-MM-dd' * also used to check when to roll files - defaults to '.yyyy-MM-dd'
* @layout layout function for log messages - defaults to basicLayout * @layout layout function for log messages - defaults to basicLayout
*/ */
function appender(filename, pattern, layout) { function appender(filename, pattern, alwaysIncludePattern, layout) {
layout = layout || layouts.basicLayout; layout = layout || layouts.basicLayout;
var logFile = new streams.DateRollingFileStream(filename, pattern); var logFile = new streams.DateRollingFileStream(filename, pattern, alwaysIncludePattern);
openFiles.push(logFile); openFiles.push(logFile);
return function(logEvent) { return function(logEvent) {
@ -38,11 +38,15 @@ function configure(config, options) {
layout = layouts.layout(config.layout.type, config.layout); layout = layouts.layout(config.layout.type, config.layout);
} }
if (!config.alwaysIncludePattern) {
config.alwaysIncludePattern = false;
}
if (options && options.cwd && !config.absolute) { if (options && options.cwd && !config.absolute) {
config.filename = path.join(options.cwd, config.filename); config.filename = path.join(options.cwd, config.filename);
} }
return appender(config.filename, config.pattern, layout); return appender(config.filename, config.pattern, config.alwaysIncludePattern, layout);
} }
exports.appender = appender; exports.appender = appender;

View File

@ -13,7 +13,7 @@ if (process.env.NODE_DEBUG && /\blog4js\b/.test(process.env.NODE_DEBUG)) {
debug = function() { }; debug = function() { };
} }
function DateRollingFileStream(filename, pattern, options, now) { function DateRollingFileStream(filename, pattern, alwaysIncludePattern, options, now) {
debug("Now is " + now); debug("Now is " + now);
if (pattern && typeof(pattern) === 'object') { if (pattern && typeof(pattern) === 'object') {
now = options; now = options;
@ -23,6 +23,12 @@ function DateRollingFileStream(filename, pattern, options, now) {
this.pattern = pattern || '.yyyy-MM-dd'; this.pattern = pattern || '.yyyy-MM-dd';
this.now = now || Date.now; this.now = now || Date.now;
this.lastTimeWeWroteSomething = format.asString(this.pattern, new Date(this.now())); this.lastTimeWeWroteSomething = format.asString(this.pattern, new Date(this.now()));
this.alwaysIncludePattern = alwaysIncludePattern;
if (this.alwaysIncludePattern) {
this.baseFilename = filename;
filename = filename + this.lastTimeWeWroteSomething;
}
debug("this.now is " + this.now + ", now is " + now); debug("this.now is " + this.now + ", now is " + now);
DateRollingFileStream.super_.call(this, filename, options); DateRollingFileStream.super_.call(this, filename, options);
@ -43,7 +49,7 @@ DateRollingFileStream.prototype.shouldRoll = function() {
DateRollingFileStream.prototype.roll = function(filename, callback) { DateRollingFileStream.prototype.roll = function(filename, callback) {
var that = this, var that = this,
newFilename = filename + this.previousTime; newFilename = this.baseFilename + this.previousTime;
debug("Starting roll"); debug("Starting roll");

View File

@ -89,9 +89,45 @@ vows.describe('../lib/appenders/dateFile').addBatch({
teardown: removeFile('date-file-test.log'), teardown: removeFile('date-file-test.log'),
'should load appender configuration from a json file': function(err, contents) { 'should load appender configuration from a json file': function(err, contents) {
assert.include(contents, 'this should be written to the file\n'); assert.include(contents, 'this should be written to the file' + require('os').EOL);
assert.equal(contents.indexOf('this should not be written to the file'), -1); assert.equal(contents.indexOf('this should not be written to the file'), -1);
} }
},
'with options.alwaysIncludePattern': {
topic: function() {
var log4js = require('../lib/log4js')
, format = require('../lib/date_format')
, logger
, options = {
"appenders": [
{
"category": "tests",
"type": "dateFile",
"filename": "test/date-file-test",
"pattern": "-from-MM-dd.log",
"alwaysIncludePattern": true,
"layout": {
"type": "messagePassThrough"
}
}
]
}
, thisTime = format.asString(options.appenders[0].pattern, new Date());
log4js.clearAppenders();
log4js.configure(options);
logger = log4js.getLogger('tests');
logger.warn('this should be written to the file');
return thisTime;
},
teardown: function(topic) {
removeFile('date-file-test' + topic);
},
'should create file with the correct pattern': function(topic) {
assert.equal(fs.existsSync(path.join(__dirname, 'date-file-test' + topic)), true);
},
'should not create file with the base filename': function(topic) {
assert.equal(fs.existsSync(path.join(__dirname, 'date-file-test')), false);
}
} }
} }