code/logger.js

"use strict";

/**
 * Logger
 * @namespace Logger
 * @description Manages logging. Extends console
 */

const config = require('./config');

const _ = require('underscore');
const s = require("underscore.string");
const ansi = require('ansi-escape-sequences');
_.mixin(s.exports());

/**
 * @class
 * @classdesc Manages logging. Extends console
 * @extends console
 */

const Logger = _.extend({}, console, {
    /**
     * @function notify
     * @description Logger will only write those messages if verbose is on
     * @static
     * @memberof Logger
     * @public
     */
    notify: function (message) {
        if (config.get("verbose")) {
            process.nextTick(function () {
                console.log(ansi.format(_.clean(message), "yellow"));
            });
        }
    },
    /**
     * @function error
     * @description Error logging override
     * @static
     * @memberof Logger
     * @param {Error} error Exception to be traced
     * @public
     */
    error: function (error) {
        if (error) {
            Logger.trace();
            var error_msg = ansi.format(_.clean(error.message || error), "red");
            console.error(error_msg);
        }
    },
    /**
     * @function log
     * @description Log override
     * @static
     * @memberof Logger
     * @param {Error} error Exception to be traced
     * @public
     */
    log: function () {
        let args = _.toArray(arguments);
        if (args.length == 1) {
            console.log(_.clean(args[0]));
        } else {
            console.log.apply(console, args);
        }
    },
    /**
     * @function trace
     * @description Trace logging override
     * @static
     * @memberof Logger
     * @public
     */
    trace: function () {
        if (config.get("verbose")) {
            console.trace.apply(trace, _.toArray(arguments));
        }
    }
});

module.exports = Logger;