logger.js 1.9 KB

// # boot - logger

var _ = require('underscore')
var mergeDefaults = require('../utils/merge-defaults')
var winston = require('winston')

exports = module.exports = function (settings) {

    if (!_.isObject(settings.logger))
        throw new Error('Settings did not have a `logger` object')

    if (!_.isObject(settings.output))
        throw new Error('Settings did not have a `output` object')

    var transports = []

    if (settings.logger['console'])
        transports.push(
            new winston.transports.Console({
                level: 'debug',
                timestamp: true,
                colorize: true
            })
        )

    if (settings.logger.file)
        transports.push(
            new winston.transports.File(
                mergeDefaults(
                    settings.output,
                    settings.logger.file
                )
            )
        )

    var logger = winston.createLogger({
        format: winston.format.combine(
            winston.format.splat(),
            winston.format.json()
        ),
        transports: transports
    })

    // if (settings.server.env === 'development')
    //     logger = expandErrors(logger)

    return logger

    // Extend a winston by making it expand errors when passed in as the
    // second argument (the first argument is the log level).
    // <https://gist.github.com/johndgiese/59bd96360ce411042294>
    // <https://gist.github.com/getvega/6211610>
    function expandErrors(logger) {
        var oldLogFunc = logger.log
        logger.log = function () {
            var args = Array.prototype.slice.call(arguments, 0)
            if (args.length >= 2 && args[1] instanceof Error) {
                args[1] = args[1].stack
            }
            return oldLogFunc.apply(this, args)
        };
        return logger
    }


}

exports['@singleton'] = true
exports['@require'] = ['igloo/settings']