|
|
|
'use strict'; |
|
|
|
var RotatingFileStream = require('./lib/rotatingfilestream'); |
|
var PeriodTrigger = require('./lib/periodtrigger'); |
|
var InitialPeriodTrigger = require('./lib/initialperiodtrigger'); |
|
var ThresholdTrigger = require('./lib/thresholdtrigger'); |
|
var TriggerAdapter = require('./lib/triggeradapter'); |
|
var _ = require('lodash'); |
|
|
|
var path = require('path'); |
|
|
|
var existingFilesStreams = {}; |
|
|
|
function RotatingFileStreamFactory(options) { |
|
|
|
var options_copy = _.extend({}, options); |
|
|
|
if (typeof (options_copy.path) !== 'string') { |
|
throw new Error('Must provide a string for path'); |
|
} |
|
|
|
options_copy.path = path.resolve(options_copy.path); |
|
|
|
var rfs = existingFilesStreams[options_copy.path]; |
|
|
|
if (!rfs) { |
|
rfs = RotatingFileStream(options_copy); |
|
|
|
existingFilesStreams[options_copy.path] = rfs; |
|
|
|
rfs.once('shutdown', function () { |
|
existingFilesStreams[options_copy.path] = null; |
|
}); |
|
|
|
if (options_copy.period) { |
|
var periodTrigger = PeriodTrigger(options_copy); |
|
TriggerAdapter(periodTrigger, rfs); |
|
} |
|
|
|
if (options_copy.period && options_copy.rotateExisting) { |
|
var initialPeriodTrigger = InitialPeriodTrigger(options_copy); |
|
TriggerAdapter(initialPeriodTrigger, rfs); |
|
} |
|
|
|
if (options_copy.threshold) { |
|
var thresholdTrigger = ThresholdTrigger(options_copy); |
|
TriggerAdapter(thresholdTrigger, rfs); |
|
} |
|
|
|
rfs.initialise(); |
|
|
|
} else if (options_copy.shared !== true || |
|
existingFilesStreams[options_copy.path].shared !== true) { |
|
throw new Error('You should not create multiple rotating file ' + |
|
'streams against the same file: ' + options_copy.path); |
|
} |
|
|
|
return rfs; |
|
} |
|
|
|
module.exports = RotatingFileStreamFactory; |
|
|