Console.js 2.06 KB
/**
 * 重写console函数
 * logsConfig 包含日志相关设置
 logsConfig:{
			consoles:["log"]//选择启动console的选择方法,
			src:""//文件目录
	}
 * @type {exports}
 */

var _ = require('lodash');
var Logger = require('./Logger');


module.exports = function (logsConfig) {
    //生成日志文件
    var loggers = Logger(logsConfig);
    /*重写console方法*/
    var Consoles = ['log', 'info', 'warn', 'error', 'debug'];

    var conConsnt={
        log : console.log,
        info : console.info,
        warn : console.warn,
        error : console.error,
        debug : console.debug
    };

    var JsonToString=function(str){
       return typeof str === "string" ? str : JSON.stringify(str);
    }
    _.forEach(Consoles, function (v) {
        if(["log","warn"].indexOf(v)>-1){
            console[v] = function () {
                var args = [].slice.call(arguments, 0),content='';
                if(args.length===1){
                    content=JsonToString(args[0]);
                }else{
                    var name=args.shift();
                    content=name+"\n"
                    args.forEach(function(item,index){
                        content+="---["+index+"]---"+JsonToString(item)+"\n";
                    });
                    
                }
                args[0] = "["+v+"]"+content;
                conConsnt[v].apply(console, args);
            };
        }else{
            console[v] = function () {
                loggers[v][v].apply(loggers[v],arguments);
            };
        }
    });
    function difference(array1, array2) {
        return array1.filter(function (item, value) {
            return !(array2.indexOf(item) > -1);
        });
    }

    //过滤出index中不需要打印或生成日志的输出
    logsConfig.consoles = logsConfig.consoles || [];
    if (logsConfig.consoles) {
        var invalidCons = difference(Consoles, logsConfig.consoles);
        invalidCons.forEach(function (f) {
            console[f] = function () {
            };
            return false;
        });
        return false;
    }
};