@house-agency/brewtils
Version:
The Brewery Node.js Utilities (brewtils)
92 lines (79 loc) • 1.93 kB
JavaScript
const _ = require('lodash');
const format = require('util').format;
const q = require('q');
const winston = require('winston');
require('winston-loggly-bulk');
q.longStackSupport = true;
const levels = {
fatal: 0,
error: 1,
warn: 2,
debug: 3
};
const logger = (new winston.Logger({
levels: levels,
transports: [
(new winston.transports.Console({
name: 'console',
level: 'debug',
formatter: formatter
}))
]
}));
function setup_transports(transports, tags) {
transports.forEach(transp => {
const properties = _.merge(
_.omit(transp, 'type'),
{
tags: (tags || []).concat(transp.tags || [])
}
);
const type = winston.transports[transp.type];
if (type) {
logger.add(type, properties);
}
});
}
function level(level) {
_.forEach(logger.transports, transp => {
transp.level = level;
});
}
function format_meta(meta) {
if (meta && Object.keys(meta).length) {
if (
meta.hasOwnProperty('message') &&
meta.hasOwnProperty('stack')
) {
return format('\n%s', meta.stack);
}
return format(
'\n%s',
JSON.stringify(meta, null, 4)
);
}
return '';
}
function formatter(options) {
return format(
'%s %s %s %s',
options.level.toUpperCase(),
(new Date()).toLocaleString(),
options.message ? options.message : '',
format_meta(options.meta)
);
}
function create_log_func(name) {
return function log() {
const args = Array.prototype.slice.call(arguments);
logger[name].apply(logger, args);
};
}
module.exports = _.merge(
create_log_func('log'),
{
logger: logger,
setup_transports: setup_transports,
level: level
}
);