summaryrefslogtreecommitdiffstats
path: root/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/lib/appenders/fileSync.js
diff options
context:
space:
mode:
Diffstat (limited to 'vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/lib/appenders/fileSync.js')
-rw-r--r--vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/lib/appenders/fileSync.js195
1 files changed, 195 insertions, 0 deletions
diff --git a/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/lib/appenders/fileSync.js b/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/lib/appenders/fileSync.js
new file mode 100644
index 00000000..a8befc96
--- /dev/null
+++ b/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/lib/appenders/fileSync.js
@@ -0,0 +1,195 @@
+"use strict";
+var debug = require('../debug')('fileSync')
+, layouts = require('../layouts')
+, path = require('path')
+, fs = require('fs')
+, streams = require('../streams')
+, os = require('os')
+, eol = os.EOL || '\n'
+;
+
+function RollingFileSync (filename, size, backups, options) {
+ debug("In RollingFileStream");
+
+ function throwErrorIfArgumentsAreNotValid() {
+ if (!filename || !size || size <= 0) {
+ throw new Error("You must specify a filename and file size");
+ }
+ }
+
+ throwErrorIfArgumentsAreNotValid();
+
+ this.filename = filename;
+ this.size = size;
+ this.backups = backups || 1;
+ this.options = options || { encoding: 'utf8', mode: parseInt('0644', 8), flags: 'a' };
+ this.currentSize = 0;
+
+ function currentFileSize(file) {
+ var fileSize = 0;
+ try {
+ fileSize = fs.statSync(file).size;
+ } catch (e) {
+ // file does not exist
+ fs.appendFileSync(filename, '');
+ }
+ return fileSize;
+ }
+
+ this.currentSize = currentFileSize(this.filename);
+}
+
+RollingFileSync.prototype.shouldRoll = function() {
+ debug("should roll with current size %d, and max size %d", this.currentSize, this.size);
+ return this.currentSize >= this.size;
+};
+
+RollingFileSync.prototype.roll = function(filename) {
+ var that = this,
+ nameMatcher = new RegExp('^' + path.basename(filename));
+
+ function justTheseFiles (item) {
+ return nameMatcher.test(item);
+ }
+
+ function index(filename_) {
+ return parseInt(filename_.substring((path.basename(filename) + '.').length), 10) || 0;
+ }
+
+ function byIndex(a, b) {
+ if (index(a) > index(b)) {
+ return 1;
+ } else if (index(a) < index(b) ) {
+ return -1;
+ } else {
+ return 0;
+ }
+ }
+
+ function increaseFileIndex (fileToRename) {
+ var idx = index(fileToRename);
+ debug('Index of ' + fileToRename + ' is ' + idx);
+ if (idx < that.backups) {
+ //on windows, you can get a EEXIST error if you rename a file to an existing file
+ //so, we'll try to delete the file we're renaming to first
+ try {
+ fs.unlinkSync(filename + '.' + (idx+1));
+ } catch(e) {
+ //ignore err: if we could not delete, it's most likely that it doesn't exist
+ }
+
+ debug('Renaming ' + fileToRename + ' -> ' + filename + '.' + (idx+1));
+ fs.renameSync(path.join(path.dirname(filename), fileToRename), filename + '.' + (idx + 1));
+ }
+ }
+
+ function renameTheFiles() {
+ //roll the backups (rename file.n to file.n+1, where n <= numBackups)
+ debug("Renaming the old files");
+
+ var files = fs.readdirSync(path.dirname(filename));
+ files.filter(justTheseFiles).sort(byIndex).reverse().forEach(increaseFileIndex);
+ }
+
+ debug("Rolling, rolling, rolling");
+ renameTheFiles();
+};
+
+RollingFileSync.prototype.write = function(chunk, encoding) {
+ var that = this;
+
+
+ function writeTheChunk() {
+ debug("writing the chunk to the file");
+ that.currentSize += chunk.length;
+ fs.appendFileSync(that.filename, chunk);
+ }
+
+ debug("in write");
+
+
+ if (this.shouldRoll()) {
+ this.currentSize = 0;
+ this.roll(this.filename);
+ }
+
+ writeTheChunk();
+};
+
+
+/**
+ * File Appender writing the logs to a text file. Supports rolling of logs by size.
+ *
+ * @param file file log messages will be written to
+ * @param layout a function that takes a logevent and returns a string
+ * (defaults to basicLayout).
+ * @param logSize - the maximum size (in bytes) for a log file,
+ * 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 timezoneOffset - optional timezone offset in minutes
+ * (default system local)
+ */
+function fileAppender (file, layout, logSize, numBackups, timezoneOffset) {
+ debug("fileSync appender created");
+ var bytesWritten = 0;
+ file = path.normalize(file);
+ layout = layout || layouts.basicLayout;
+ numBackups = numBackups === undefined ? 5 : numBackups;
+ //there has to be at least one backup if logSize has been specified
+ numBackups = numBackups === 0 ? 1 : numBackups;
+
+ function openTheStream(file, fileSize, numFiles) {
+ var stream;
+
+ if (fileSize) {
+ stream = new RollingFileSync(
+ file,
+ fileSize,
+ numFiles
+ );
+ } else {
+ stream = (function(f) {
+ // create file if it doesn't exist
+ if (!fs.existsSync(f))
+ fs.appendFileSync(f, '');
+
+ return {
+ write: function(data) {
+ fs.appendFileSync(f, data);
+ }
+ };
+ })(file);
+ }
+
+ return stream;
+ }
+
+ var logFile = openTheStream(file, logSize, numBackups);
+
+ return function(loggingEvent) {
+ logFile.write(layout(loggingEvent, timezoneOffset) + eol);
+ };
+}
+
+function configure(config, options) {
+ var layout;
+ if (config.layout) {
+ layout = layouts.layout(config.layout.type, config.layout);
+ }
+
+ if (options && options.cwd && !config.absolute) {
+ config.filename = path.join(options.cwd, config.filename);
+ }
+
+ return fileAppender(
+ config.filename,
+ layout,
+ config.maxLogSize,
+ config.backups,
+ config.timezoneOffset
+ );
+}
+
+exports.appender = fileAppender;
+exports.configure = configure;