moleculer
Version:
Fast & powerful microservices framework for Node.JS
73 lines (58 loc) • 1.79 kB
JavaScript
/*
* moleculer
* Copyright (c) 2017 Ice Services (https://github.com/ice-services/moleculer)
* MIT Licensed
*/
;
const isString = require("lodash/isString");
const isObject = require("lodash/isObject");
module.exports = {
/**
* Create a sub-logger by external logger.
*
* @param {Object} extLogger
* @param {String} moduleName
* @param {String|Object} logLevel
* @returns
*/
wrap(extLogger, moduleName, logLevel) {
let noop = function() {};
const levels = ["fatal", "error", "warn", "info", "debug", "trace"];
let prefix = moduleName? "[" + moduleName + "] " : "";
let logger = {};
levels.forEach((type) => logger[type] = noop);
if (extLogger) {
let levelIdx = -1;
if (isString(logLevel))
levelIdx = levels.indexOf(logLevel);
else if (isObject(logLevel)) {
let customLevel = logLevel[moduleName];
if (customLevel == null)
customLevel = logLevel["*"];
if (customLevel == null || customLevel === false)
levelIdx = -1;
else
levelIdx = levels.indexOf(customLevel);
}
levels.forEach((type, i) => {
if (i > levelIdx) return;
let externalMethod = extLogger[type];
if (!externalMethod) {
switch(type) {
case "fatal":
case "warn": externalMethod = extLogger["error"] || extLogger["info"]; break;
case "debug": externalMethod = extLogger["info"]; break;
case "trace": externalMethod = extLogger["debug"] || extLogger["info"]; break;
default: externalMethod = extLogger["info"];
}
}
if (externalMethod) {
logger[type] = function(msg, ...args) {
externalMethod(prefix + msg, ...args);
}.bind(extLogger);
}
});
}
return logger;
}
};