-Module(Cobalt.Formatter, 'Simple')({
- format : function (logObject, opts){
- var indent, date;
+'use strict';
- indent = Array(logObject._indentLevel + 1).join(' ');
+const Utilities = require('../utilities');
- date = new Date(logObject._timestamp);
+/**
+ * Simple formatter. Outputs a predefined format:
+ * `[{{_timestamp}}][{{_levelString}}] {{_from}}: {{message}}`;
+ *
+ * @memberof Formatters
+ * @implements IFormatter
+ * @class Simple
+ */
+module.exports = class SimpleFormatter {
- return indent + '[' + date.toISOString() + '][' + logObject._levelString + '] ' + logObject._from + ' : ' + logObject.message;
+ constructor(config) {
+
+ /**
+ * Flag that tells us whether or not to use ANSI color. Defaults to
+ * false.
+ *
+ * @name colorize
+ * @instance
+ * @memberof Formatters.Simple
+ * @type Boolean
+ * @default false
+ */
+ this.colorize = false;
+
+ Object.assign(this, config || {});
+ }
+
+ /**
+ * Main entry point, it will read the incoming log object and convert
+ * it to the output string.
+ *
+ * @function format
+ * @instance
+ * @memberof Formatters.Simple
+ * @param {tCologneLog} logObjet the log to format
+ * @return {String} the formatted object
+ */
+ format(logObject) {
+
+ const date = (new Date(Number(logObject._timestamp) / 1000000)).toISOString();
+ const levelString = this._colorize(logObject._levelString, logObject._level);
+
+ return `[${date}][${levelString}] ${logObject._from}: ${logObject.message}`;
+ }
+
+ _colorize(levelString, level) {
+
+ if (!this.colorize) {
+ return levelString;
}
-});
+
+ const escapeCode = String.fromCharCode(27);
+ const color = escapeCode + Utilities.getAnsiCode(Utilities.getLevelAnsi(level));
+ const reset = escapeCode + Utilities.getAnsiCode('reset');
+
+ return color + levelString + reset;
+ }
+};