API Docs for: 0.8.0
Show:

File: include/utils/logging.js

/*
    Copyright (C) 2016  PencilBlue, LLC

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
'use strict';

//dependencies
var path    = require('path');
var cluster = require('cluster');
var winston = require('winston');
var util    = require('../util.js');

module.exports = function LogFactory(config){

    //verify that we have a valid logging configuration provided
    if (!util.isObject(config.logging)) {
        config.logging = {};
    }
    if (!util.isString(config.logging.level)) {
        config.logging.level = "info";
    }
    if (!util.isArray(config.logging.transports)) {

        //initialize transports with console by default
        config.logging.transports = [
            new (winston.transports.Console)({ level: config.logging.level, timestamp: true, label: cluster.worker ? cluster.worker.id : 'M'}),
        ];

        //when a log file path is provided log to a file
        if (util.isString(config.logging.file)) {

            //ensure the directory structure exists
            util.mkdirsSync(config.logging.file, true, util.cb);

            //add the transport
            var fileTransport = new (winston.transports.File)({ filename: config.logging.file, level: config.logging.level, timestamp: true });
            config.logging.transports.push(fileTransport);
        }
    }

    //configure winston
	var logger =  new (winston.Logger)({
	    transports: config.logging.transports,
	    level: config.logging.level,
        padLevels: false
   });

    /**
     * Determines if the root log level is set to debug or silly
     * @method isDebug
     * @return {Boolean}
     */
	logger.isDebug = function(){
		return logger.levels[logger.level] >= logger.levels.debug;
	};

    /**
     * Determines if the root log level is set to silly
     * @method isSilly
     * @return {Boolean}
     */
	logger.isSilly = function(){
		return logger.levels[logger.level] >= logger.levels.silly;
	};

    //return the conifgured logger instance
	logger.info('SystemStartup: Log Level is: '+config.logging.level);
	return logger;
};