UNPKG

@luminati-io/mountebank

Version:

Over the wire test doubles

48 lines (39 loc) 1.49 kB
'use strict'; /** @module */ const inherit = require('./inherit.js'), util = require('util'); function wrap (wrappedLogger, logger) { ['debug', 'info', 'warn', 'error'].forEach(level => { wrappedLogger[level] = function () { const args = Array.prototype.slice.call(arguments); args[0] = wrappedLogger.scopePrefix + args[0]; // Format here rather than use winston's splat formatter // to get rid of inconsistent "meta" log elements const message = util.format.apply(null, args); logger[level](message); }; }); wrappedLogger.baseLogger = logger; } /** * Returns a logger that prefixes each message of the given logger with a given scope * @param {Object} logger - The logger to add a scope to * @param {string} scope - The prefix for all log messages * @returns {Object} */ function create (logger, scope) { function formatScope (scopeText) { return scopeText.indexOf('[') === 0 ? scopeText : `[${scopeText}] `; } const wrappedLogger = inherit.from(logger, { scopePrefix: formatScope(scope), withScope: nestedScopePrefix => create(logger, `${wrappedLogger.scopePrefix}${nestedScopePrefix} `), changeScope: newScope => { wrappedLogger.scopePrefix = formatScope(newScope); wrap(wrappedLogger, logger); } }); wrap(wrappedLogger, logger); return wrappedLogger; } module.exports = { create };