lib/logging.js

/**
 * @file Handle application logs
 * @author Antonio Olmo Titos <a@olmo-titos.info>
 * @exports lib/logging
 */

// Configuration:
const CONFIG = require('../config');

// External packages:
const WINSTON = require('winston');

// Variables:
var logger;

/**
 * Set up logging
 */

const setUp = function() {
    if (logger)
        logger.warn(`“logging.setUp()” called more than once`);
    else {
        const level = CONFIG.debug ? 'silly' : 'info';
        // @TODO: handle issues.
        logger = WINSTON.createLogger({
            transports: [
                new WINSTON.transports.Console({level: level, json: false}),
                new WINSTON.transports.File({level: level, json: false, filename: CONFIG.log})
            ]
        });
        logger.info(`logging to file “${CONFIG.log}” with level “${level}”`);
        // Export more stuff:
        exports.error = logger.error;
        exports.warn = logger.warn;
        exports.info = logger.info;
        exports.debug = logger.debug;
        exports.dir = dir;
    }
};

/**
 * Log the trace of an object
 * @param {Object} obj - the object to print
 * @param {String} msg - (optional) a message to prefix the trace
 */

const dir = function(obj, msg) {
    const prefix = msg ? `${msg}: ` : '';
    const trace = JSON.stringify(obj);
    logger.debug(`${prefix}${trace}`);
};

// Export stuff:
exports.setUp = setUp;