]> git.r.bdr.sh - rbdr/cologne/blobdiff - lib/loggers/console.js
Update the code.
[rbdr/cologne] / lib / loggers / console.js
diff --git a/lib/loggers/console.js b/lib/loggers/console.js
new file mode 100644 (file)
index 0000000..116b04b
--- /dev/null
@@ -0,0 +1,94 @@
+'use strict';
+
+const Utilities = require('../utilities');
+
+/**
+ * Logger for the javascript console.
+ *
+ * @implements ILogger
+ * @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);
+  }
+};