shohei-ot
3/14/2018 - 6:12 AM

console.*** の実行をon/offで制御できるようにしたclass

console.*** の実行をon/offで制御できるようにしたclass

/**
 * Logger Class
 *
 * `window.console` のラッパー.
 * `logger.on()`, `logger.off()` で `console.*` を実行するかどうか切り替えられる.
 * constructor の引数に boolean を渡して、console出力の初期状態を指定できる.
 */
class Logger {
  constructor(status = false) {
    this._debugMode = !!status
    const bindConsoleMethods = function bindConsoleLogger(self) {
      const ignorePropList = ['on', 'off', '_debug', '_debugMode']
      const props = Object.keys(window.console).filter(prop => !ignorePropList.includes(prop))
      for (const prop of props) {
        self[prop] = function() {
          if (self._debug) window.console[prop](...[...arguments])
        }
      }
    }
    bindConsoleMethods(this)
  }
  set _debug(status) {
    this._debugMode = !!status
  }
  get _debug() {
    return this._debugMode
  }
  on() {
    this._debug = true
  }
  off() {
    this._debug = false
  }
}

export default Logger