UNPKG

@house-agency/brewtils

Version:

The Brewery Node.js Utilities (brewtils)

92 lines (79 loc) 1.93 kB
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 } );