change approach again
This commit is contained in:
155
node_modules/simple-node-logger/lib/AbstractAppender.js
generated
vendored
Normal file
155
node_modules/simple-node-logger/lib/AbstractAppender.js
generated
vendored
Normal file
@ -0,0 +1,155 @@
|
||||
/**
|
||||
* @class AbstractAppender
|
||||
*
|
||||
* @author: darryl.west@raincitysoftware.com
|
||||
* @created: 7/7/14 5:58 PM
|
||||
*/
|
||||
const util = require( 'util' );
|
||||
const moment = require( 'moment' );
|
||||
const dash = require( 'lodash' );
|
||||
|
||||
const AbstractAppender = function(options) {
|
||||
'use strict';
|
||||
|
||||
const appender = this;
|
||||
const typeName = options.typeName;
|
||||
const timestampFormat = options.timestampFormat || 'HH:mm:ss.SSS';
|
||||
|
||||
this.separator = options.separator || ' ';
|
||||
|
||||
/**
|
||||
* format the entry and return the field list
|
||||
*
|
||||
* @param entry the log entry
|
||||
* @param thisArg - use this to override the base object
|
||||
*
|
||||
* @returns field array
|
||||
*/
|
||||
this.formatEntry = function(entry, thisArg) {
|
||||
const apdr = thisArg || appender;
|
||||
|
||||
const fields = [];
|
||||
|
||||
if (entry.domain) {
|
||||
fields.push( entry.domain );
|
||||
}
|
||||
|
||||
fields.push( apdr.formatTimestamp( entry.ts ) );
|
||||
fields.push( apdr.formatLevel( entry.level ) );
|
||||
|
||||
if (entry.category) {
|
||||
fields.push( entry.category );
|
||||
}
|
||||
|
||||
fields.push( apdr.formatMessage( entry.msg ) );
|
||||
|
||||
return fields;
|
||||
};
|
||||
|
||||
/**
|
||||
* format the message
|
||||
*
|
||||
* @param msg the log message
|
||||
* @param thisArg - use this to override the base object
|
||||
*
|
||||
* @returns field array
|
||||
*/
|
||||
this.formatMessage = function(msg, thisArg) {
|
||||
const apdr = thisArg || appender;
|
||||
|
||||
if (!msg) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (util.isArray( msg )) {
|
||||
const list = msg.map(function(item) {
|
||||
if (util.isDate( item )) {
|
||||
return apdr.formatDate( item );
|
||||
} else {
|
||||
return apdr.formatObject( item );
|
||||
}
|
||||
});
|
||||
|
||||
return list.join('');
|
||||
} else {
|
||||
return msg;
|
||||
}
|
||||
};
|
||||
|
||||
this.formatDate = function(value) {
|
||||
return value.toJSON();
|
||||
};
|
||||
|
||||
this.formatObject = function(value) {
|
||||
if (!value) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (dash.isObject( value )) {
|
||||
if (value instanceof Error) {
|
||||
return [ value.message, value.stack ].join('\n');
|
||||
}
|
||||
try {
|
||||
return JSON.stringify( value );
|
||||
} catch (ignore) {
|
||||
return 'json error: ' + value.toString();
|
||||
}
|
||||
} else {
|
||||
var s = value.toString();
|
||||
if (s === '[object Object]') {
|
||||
return util.inspect( value );
|
||||
} else {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* format the level string by forcing to upper case and padding to 5 chars
|
||||
*
|
||||
* @param level
|
||||
* @returns {string}
|
||||
*/
|
||||
this.formatLevel = function(level) {
|
||||
let str = level.toUpperCase();
|
||||
if (str.length < 5) {
|
||||
str += ' ';
|
||||
}
|
||||
|
||||
return str;
|
||||
};
|
||||
|
||||
/**
|
||||
* format the timestamp to HH:mm:ss.SSS
|
||||
*
|
||||
* @param ts the unix milliseconds
|
||||
* @returns formatted string
|
||||
*/
|
||||
this.formatTimestamp = function(ts) {
|
||||
return moment( ts ).format( timestampFormat );
|
||||
};
|
||||
|
||||
/**
|
||||
* return the type name of this appender (ConsoleAppender)
|
||||
*/
|
||||
this.getTypeName = function() {
|
||||
return typeName;
|
||||
};
|
||||
|
||||
// constructor tests
|
||||
if (!typeName) {
|
||||
throw new Error('appender must be constructed with a type name');
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = AbstractAppender;
|
||||
|
||||
AbstractAppender.extend = function(child, options) {
|
||||
'use strict';
|
||||
|
||||
const parent = new AbstractAppender( options );
|
||||
|
||||
dash.extend( child, parent );
|
||||
|
||||
return parent;
|
||||
};
|
Reference in New Issue
Block a user