UNPKG

1.78 kBJavaScriptView Raw
1
2'use strict';
3
4var path = require('path');
5var eachModule = require('each-module');
6var winston = require('winston');
7
8module.exports = function (config) {
9 var moduleLoadErrors = [];
10
11 var getArrayOfValidModulesByDirName = function (finalDir) {
12 var modules = [];
13 var modulePusher = function (moduleName, moduleExports, file) {
14 if (typeof moduleExports === 'function') {
15 modules.push(moduleExports);
16 } else {
17 moduleLoadErrors.push('Invalid module dropped ' + file);
18 }
19 };
20
21 // User-defined configurations take priority, but fallback to defaults if all seem invalid
22 var locations = [config.path.root, config.path.shunterRoot]; // Config.path.root = users files
23 for (var i = 0; i < locations.length; i++) {
24 var localPath = path.join(locations[i], config.structure.logging, finalDir);
25 eachModule(localPath, modulePusher);
26 if (modules.length > 0) {
27 break;
28 }
29 }
30 return modules;
31 };
32
33 return {
34 getLogger: function () {
35 var validateTransports = function (arModules) {
36 return arModules.map(function (fnModule) {
37 return fnModule(config);
38 }).filter(function (obModule) {
39 return Boolean(obModule);
40 });
41 };
42
43 var validateFilters = function (arModules) {
44 return arModules.filter(function (fnModule) {
45 return typeof fnModule('debug', 'a message') === 'string';
46 });
47 };
48
49 var transports = getArrayOfValidModulesByDirName(config.structure.loggingTransports);
50 var filters = getArrayOfValidModulesByDirName(config.structure.loggingFilters);
51
52 var loggerInstance = new winston.Logger({
53 transports: validateTransports(transports),
54 filters: validateFilters(filters)
55 });
56
57 moduleLoadErrors.forEach(function (err) {
58 loggerInstance.error(err);
59 });
60
61 return loggerInstance;
62 }
63 };
64};