'use strict'; const Utilities = require('../utilities'); /** * Logger for the javascript console. * * @implements ILogger * @memberof Loggers * @class Console */ module.exports = class ConsoleLogger { constructor(config) { /** * The console it will write to, can be any object that looks * and acts like a console, including other cologne objects. * * @name console * @instance * @memberof Loggers.Console * @type Object * @default global.console */ this.console = console; /** * The formatter it will use to output the log. If not present it * will output raw JSON * * @name formatter * @instance * @memberof Loggers.Console * @type IFormatter * @default null */ this.formatter = null; Object.assign(this, config); } /** * Main entry point, for each incoming argument it will attempt to * format and send to the console. * * @function log * @instance * @memberof Loggers.Console * @return {undefined} */ log(...logs) { const formattedLogs = logs.map((log) => ({ log: this._format(log), level: log._level })); for (const { log, level } of formattedLogs) { this._log(log, level ); } } // Routes an individual log to the appropriatet console _log(log, level) { switch (level) { case 0: case 1: case 2: case 3: this.console.error(log); break; case 4: this.console.warn(log); break; case 5: case 6: this.console.info(log); break; case 7: default: this.console.log(log); break; } } _format(logObject) { if (this.formatter) { return this.formatter.format(logObject); } return Utilities.stringify(logObject); } };