UNPKG

shunter

Version:

A Node.js application built to read JSON and translate it into HTML

62 lines (51 loc) 1.65 kB
'use strict'; var path = require('path'); var eachModule = require('each-module'); var winston = require('winston'); module.exports = function (config) { var loggerInstance; var moduleLoadErrors = []; var getArrayOfValidModulesByDirName = function (transportsDirName) { var modules = []; var modulePusher = function (moduleName, moduleExports, file) { if (typeof moduleExports === 'function') { modules.push(moduleExports); } else { moduleLoadErrors.push('Invalid logging transport dropped ' + file); } }; // User-defined transports take priority, but fallback to defaults if all seem invalid var locations = [config.path.root, config.path.shunterRoot]; // config.path.root = users files for (var [index, location] of locations.entries()) { var localPath = path.join(location, config.structure.logging, transportsDirName); eachModule(localPath, modulePusher); if (index === 0 && modules.length > 0) { // the user supplied at least one valid-looking transport break; } } return modules; }; return { getLogger: function () { if (loggerInstance) { return loggerInstance; } var getTransports = function (modules) { return modules.map(function (fnModule) { return fnModule(config); }).filter(function (module) { return Boolean(module); }); }; var transports = getArrayOfValidModulesByDirName(config.structure.loggingTransports); loggerInstance = winston.createLogger({ transports: getTransports(transports) }); moduleLoadErrors.forEach(function (err) { loggerInstance.error(err); }); return loggerInstance; } }; };