Home Reference Source

src/log.js

import Augment from './utils/augment'
import config from './config'

const loggers = {
  console: {
    detect: () => config.logger.constructor.name === 'Console',
    handler: (level, message, metadata) => {
      if (metadata) {
        return config.logger[level](new Augment(message, metadata))
      }
      return config.logger[level](message)
    },
  },
  winston: {
    detect: () =>
      config.logger.Container &&
      config.logger.Logger &&
      config.logger.Transport,
    handler: (level, message, metadata = {}) =>
      config.logger.log(level, message, metadata),
  },
  bunyan: {
    detect: () => config.logger.constructor.name === 'Logger',
    handler: (level, message, metadata) => {
      config.logger[level](metadata, message)
    },
  },
}

const log = (...args) => {
  // Iterate through the loggers object to detect
  // which logger is set in the timber config.
  for (const name in loggers) {
    // If we successfully detected the logger...
    if (loggers[name].detect()) {
      // Pass the provded arguments to the logger
      return loggers[name].handler(...args)
    }
  }
}

export default log