index.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. const bunyan = require('bunyan'); // will be replaced to browser-bunyan on browser by webpack
  2. const minimatch = require('minimatch');
  3. const isBrowser = typeof window !== 'undefined';
  4. const isProd = process.env.NODE_ENV === 'production';
  5. const config = require('@root/config').logger;
  6. let stream = isProd ? require('./stream.prod') : require('./stream.dev');
  7. // logger store
  8. let loggers = {};
  9. /**
  10. * determine logger level
  11. * @param {string} name Logger name
  12. */
  13. function determineLoggerLevel(name) {
  14. if (isBrowser && isProd) {
  15. 'error';
  16. }
  17. let level = config.default;
  18. // retrieve configured level
  19. Object.keys(config).some(key => { // breakable forEach
  20. // test whether 'name' matches to 'key'(blob)
  21. if (minimatch(name, key)) {
  22. level = config[key];
  23. return; // break if match
  24. }
  25. });
  26. return level;
  27. }
  28. module.exports = (name) => {
  29. // create logger instance if absent
  30. if (loggers[name] == null) {
  31. loggers[name] = bunyan.createLogger({
  32. name,
  33. stream,
  34. level: determineLoggerLevel(name),
  35. });
  36. }
  37. return loggers[name];
  38. };